Замена нежелательных экземпляров тсс и histc

Старые функции гистограммы (histhistc)

Более ранние версии 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

Введите матрицы

hist создает гистограмму для каждого столбца входной матрицы и строит гистограммы рядом друг с другом на том же рисунке.

A = randn(100,2);
hist(A)

histogram обрабатывает входную матрицу как один высокий вектор и создает одну гистограмму. Чтобы построить несколько гистограмм, создайте различный объект гистограммы для каждого столбца данных. Используйте hold on команда, чтобы построить гистограммы на том же рисунке.

A = randn(100,2);
h1 = histogram(A(:,1),10)
edges = h1.BinEdges;
hold on
h2 = histogram(A(:,2),edges)

Вышеупомянутый пример кода использует те же границы интервала для каждой гистограммы, но в некоторых случаях лучше установить BinWidth из каждой гистограммы, чтобы быть тем же самым вместо этого. Кроме того, в целях отображения может быть полезно установить FaceAlpha свойство каждой гистограммы, когда это влияет на прозрачность перекрывающихся панелей.

Спецификация интервала

hist принимает центры интервала как второй вход.

histogram принимает границы интервала как второй вход.

Преобразовывать центры интервала в границы интервала для использования с histogram, смотрите Преобразуют Центры Интервала в Границы интервала.

Примечание

В случаях, где центры интервала использовали с hist целые числа, такие как hist(A,-3:3), используйте новый встроенный метод раскладывания histogram для целых чисел.

histogram(A,'BinLimits',[-3,3],'BinMethod','integers')

Выходные аргументы

hist возвращает количество интервалов как выходной аргумент, и опционально может возвратить центры интервала как второй выходной аргумент.

A = randn(100,1);
[N, Centers] = hist(A)

histogram возвращает объект гистограммы как выходной аргумент. Объект содержит много свойств интереса (количество интервалов, границы интервала, и так далее). Можно изменить аспекты гистограммы путем изменения ее значений свойств. Для получения дополнительной информации смотрите histogram.

A = randn(100,1);
h = histogram(A);
N = h.Values
Edges = h.BinEdges

Примечание

Чтобы вычислить количество интервалов (не строя гистограмму), замените [N, Centers] = hist(A) с [N,edges] = histcounts(A,nbins).

Количество по умолчанию интервалов

hist использование 10 интервалов по умолчанию.

Оба histogram и histcounts используйте автоматический алгоритм раскладывания по умолчанию. Количество интервалов определяется размером и распространением входных данных.

A = randn(100,1);
histogram(A)
histcounts(A)

'BinLimits'

hist использует минимальные и максимальные значения конечных данных, чтобы определить левые и правые ребра первой и последней панели в графике. -Inf и Inf включены в первый и последний интервал, соответственно.

Если BinLimits не установлен, затем histogram использует рациональные пределы интервала на основе, но не точно равный, минимальные и максимальные значения конечных данных. histogram игнорирует Inf значения, если одна из границ интервала явным образом не задает Inf или -Inf как граница интервала.

Воспроизвести результаты hist(A) для конечных данных (никакой Inf значения), используйте 10 интервалов и явным образом установите BinLimits к минимальным и максимальным значениям данных.

A = randi(5,100,1);
histogram(A,10,'BinLimits',[min(A) max(A)])

Обновления кода для histc

РазличиеСтарое поведение с histcНовое поведение с histcounts
Введите матрицы

histc вычисляет количество интервалов для каждого столбца входных данных. Для входной матрицы размера m- nhistc возвращает матрицу количества интервалов размера length(edges)- n.

A = randn(100,10);
edges = -4:4;
N = histc(A,edges)

histcounts обрабатывает входную матрицу как один высокий вектор и вычисляет количество интервалов для целой матрицы.

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

Если эффективность является проблемой из-за большого количества столбцов в матрице, то рассмотрите продолжение использовать histc для постолбцового количества интервалов.

Значения включены в последний интервал

histc включает элемент A(i) в последнем интервале, если A(i) == edges(end). Выход, N, вектор с length(edges) элементы, содержащие количество интервалов. Значения, выходящие за пределы интервалов, не считаются.

histcounts включает элемент A(i) в последнем интервале, если edges(end-1) <= A(i) <= edges(end). Другими словами, histcounts комбинирует последние два интервала от histc в один итоговый интервал. Выход, N, вектор с length(edges)-1 элементы, содержащие количество интервалов. Если вы задаете границы интервала, то значения, выходящие за пределы интервалов, не считаются. В противном случае, histcounts автоматически определяет соответствующие границы интервала, чтобы использовать, чтобы включать все данные.

A = 1:4;
edges = [1 2 2.5 3]
N = histcounts(A)
N = histcounts(A,edges)

Последний интервал от histc в основном, полезно, чтобы считать целые числа. Сделать это целое число, рассчитывающее с histcounts, используйте 'integers' binMethod :

N = histcounts(A,'BinMethod','integers'); 
Выходные аргументы

histc возвращает количество интервалов как выходной аргумент, и опционально может возвратить индексы интервала как второй выходной аргумент.

A = randn(15,1);
edges = -4:4;
[N,Bin] = histc(A,edges)
  • Поскольку интервал считает вычисления как N = histc(A,edges) или [N,bin] = histc(A,edges)Использование histcounts. histcounts функция возвращает количество интервалов как выходной аргумент, и опционально может возвратить границы интервала как второй выход или индексы интервала как третий выход.

    A = randn(15,1);
    [N,Edges,Bin] = histcounts(A)
  • Для вычислений размещения интервала как [~,Bin] = histc(A,edges)Использование discretize. discretize функционируйте предлагает дополнительные опции для определения размещения интервала каждого элемента.

    A = randn(15,1);
    edges = -4:4;
    Bin = discretize(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)