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) |
|
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)
