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) |
'BinLimits' |
| Если Воспроизвести результаты 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) |
|
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)];
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)