hist
, histc
)Более ранние версии MATLAB® использовать hist
и histc
функционирует как основной способ создания гистограмм и вычисления количеств интервалов гистограммы. Эти функции, хотя и хороши для некоторых общих целей, имеют ограниченные общие возможности. Использование hist
и histc
в новом коде обескуражены по этим причинам (среди прочих):
После использования hist
для создания гистограммы изменение свойств гистограммы затруднено и требует перевычисления всей гистограммы.
Поведение по умолчанию hist
использовать 10 интервалов, что не подходит для многих наборов данных.
Построение графика нормированной гистограммы требует ручных расчетов.
hist
и histc
не имеют согласованного поведения.
histogram
, histcounts
, и discretize
функции резко продвигают возможности создания и вычисления гистограмм в MATLAB, в то же время способствуя согласованности и простоте использования. histogram
, histcounts
, и discretize
являются рекомендуемыми функциями создания и расчета гистограммы для нового кода.
Следует особо отметить следующие изменения, которые являются улучшениями по сравнению с hist
и histc
:
histogram
может вернуть объект гистограммы. Можно использовать объект для изменения свойств гистограммы.
Оба histogram
и histcounts
имеют возможности автоматического раскладывания и нормализации, со встроенными несколькими общими опциями.
histcounts
является основной функцией вычисления для histogram
. Результатом является то, что функции имеют последовательное поведение.
discretize
обеспечивает дополнительные опции и гибкость для определения размещения каждого элемента в интервале.
Несмотря на вышеупомянутые улучшения, между старыми и ныне рекомендованными функциями существует несколько важных различий, которые могут потребовать обновления вашего кода. В таблицах суммируются различия между функциями и приводятся предложения по обновлению кода.
Обновления кода для hist
Различие | Старое поведение с hist | Новое поведение с histogram |
---|---|---|
Входные матрицы |
A = randn(100,2); hist(A) |
A = randn(100,2); h1 = histogram(A(:,1),10) edges = h1.BinEdges; hold on h2 = histogram(A(:,2),edges) В приведенном выше примере кода используются те же границы интервала для каждой гистограммы, но в некоторых случаях лучше задать |
Спецификация интервал |
|
Чтобы преобразовать центры интервала в границы интервала для использования с Примечание В случаях, когда центр интервала используется с histogram(A,'BinLimits',[-3,3],'BinMethod','integers') |
Выходные аргументы |
A = randn(100,1); [N, Centers] = hist(A) |
A = randn(100,1); h = histogram(A); N = h.Values Edges = h.BinEdges Примечание Чтобы вычислить количество интервалов (без построения гистограммы), замените |
Количество интервалов по умолчанию |
| Оба A = randn(100,1); histogram(A) histcounts(A) |
Пределы интервала |
| Если Чтобы воспроизвести результаты A = randi(5,100,1); histogram(A,10,'BinLimits',[min(A) max(A)]) |
Обновления кода для histc
Различие | Старое поведение с histc | Новое поведение с histcounts |
---|---|---|
Входные матрицы |
A = randn(100,10); edges = -4:4; N = histc(A,edges) |
A = randn(100,10); edges = -4:4; N = histcounts(A,edges) Используйте цикл for, чтобы вычислить количество интервалов по каждому столбцу. A = randn(100,10); nbins = 10; N = zeros(nbins, size(A,2)); for k = 1:size(A,2) N(:,k) = histcounts(A(:,k),nbins); end Если эффективность является проблемой из-за большого количества столбцов в матрице, то рассмотрите продолжение использования |
Значения, включенные в последний интервал |
|
A = 1:4; edges = [1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges) Последний интервал из N = histcounts(A,'BinMethod','integers'); |
Выходные аргументы |
A = randn(15,1); edges = -4:4; [N,Bin] = histc(A,edges) |
|
The hist
функция принимает центры интервала, в то время как histogram
функция принимает границы интервала. Чтобы обновить код для использования histogram
, вам может потребоваться преобразовать центры интервала в границы интервала, чтобы воспроизвести результаты, достигнутые с помощью hist
.
Например, укажите центры интервалов для использования с hist
. Эти интервалы имеют равномерную ширину.
A = [-9 -6 -5 -2 0 1 3 3 4 7]; centers = [-7.5 -2.5 2.5 7.5]; hist(A,centers)
Чтобы преобразовать центры интервала в границы интервала, вычислите середину между последовательными значениями в centers
. Этот метод воспроизводит результаты hist
как для равномерных, так и для неоднородных ширин интервала.
d = diff(centers)/2; edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];
The hist
функция включает в себя значения, падающие на правое ребро каждого интервала (первое интервал включает в себя обоих ребер), тогда как histogram
включает значения, которые попадают на левый край каждого интервала (а последнее интервал включает в себя обоих ребер). Немного сдвиньте границы интервала, чтобы получить то же количество интервалов, что и hist
.
edges(2:end) = edges(2:end)+eps(edges(2:end))
edges = 1×5
-10.0000 -5.0000 0.0000 5.0000 10.0000
Теперь используйте histogram
с границами интервала.
histogram(A,edges)