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)