numpy.histogram
-
numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None)[source] -
Вычисление гистограммы набора данных.
Параметры: a : array_like
Входные данные. Гистограмма вычисляется по уплощенному массиву.
bins : int или последовательность скаляров или str, необязательно
Если
binsявляется целым числом, оно определяет число равномерно расположенных интервалов в заданном диапазоне (по умолчанию 10). Еслиbinsявляется последовательностью, она определяет границы интервалов, включая правую границу, что позволяет использовать неравномерные ширины интервалов.Введено в версии 1.11.0.
Если
binsявляется строкой из списка ниже,histogramбудет использовать выбранный метод для вычисления оптимальной ширины интервала и, следовательно, числа интервалов (см.Notesдля более подробного описания алгоритмов) из данных, которые попадают в запрашиваемый диапазон. Хотя ширина интервала будет оптимальной для фактических данных в диапазоне, количество интервалов будет вычисляться для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать вариант ‘auto’. Данные с весами не поддерживаются для автоматического выбора размера интервала.- ‘auto’
-
Максимальное значение из оценок ‘sturges’ и ‘fd’.
- ‘fd’ (оценка Фридмана-Дикона)
-
Робастная (устойчивая к выбросам) оценка, которая учитывает изменчивость данных и размер набора данных.
- ‘doane’
-
Улучшенная версия оценки Стерджеса, которая лучше работает с наборами данных, не имеющими нормального распределения.
- ‘scott’
-
Менее робастная оценка, которая учитывает изменчивость данных и размер набора данных.
- ‘rice’
-
Оценочный метод, который не учитывает изменчивость, а только размер набора данных. Часто переоценивает необходимое количество интервалов.
- ‘sturges’
-
Метод по умолчанию в R, учитывает только размер набора данных. Оптимален только для данных, имеющих нормальное распределение, и недооценивает число интервалов для больших наборов данных, не имеющих нормального распределения.
- ‘sqrt’
-
Оценка с использованием квадратного корня (из размера набора данных), используемая в Excel и других программах из-за скорости и простоты.
range : (float, float), необязательно
Нижняя и верхняя границы интервалов. Если не указано, диапазон определяется просто
(a.min(), a.max()). Значения вне диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму.rangeтакже влияет на автоматическое вычисление интервалов. Хотя ширина интервала вычисляется оптимальной на основе фактических данных вrange, количество интервалов будет заполнять весь диапазон, включая части, не содержащие данных.normed : bool, необязательно
Этот ключевой параметр устарел в NumPy 1.6.0 из-за путаницы/ошибочного поведения. Он будет удален в NumPy 2.0.0. Используйте ключевой параметр
densityвместо него. ЕслиFalse, результат будет содержать количество образцов в каждом интервале. ЕслиTrue, результат является значением функции плотности вероятности в интервале, нормированным таким образом, что интеграл по диапазону равен 1. Обратите внимание, что это последнее поведение известно как ошибочное при неравномерных ширинах интервалов; используйтеdensityвместо этого.weights : array_like, необязательно
Массив весов, имеющий ту же форму, что и
a. Каждое значение вaвносит свой связанный вес в счет интервалов (вместо 1). Еслиdensityимеет значение True, веса нормируются таким образом, что интеграл плотности по диапазону остается равным 1.density : bool, необязательно
Если
False, результат будет содержать количество образцов в каждом интервале. ЕслиTrue, результат является значением функции плотности вероятности в интервале, нормированным таким образом, что интеграл по диапазону равен 1. Обратите внимание, что сумма значений гистограммы не будет равна 1, если не выбраны интервалы единичной ширины; это не функция вероятности.Переопределяет ключевой параметр
normedпри его указании.Возвращает: hist : массив
Значения гистограммы. См.
densityиweightsдля описания возможных семантик.bin_edges : массив типа float
Возвращает границы интервалов
(length(hist)+1).См. также
Примечания
Все, кроме последнего (правого) интервала, полуоткрытые. Другими словами, если
bins:[1, 2, 3, 4]
тогда первый интервал —
[1, 2)(включая 1, но не включая 2), а второй —[2, 3). Последний интервал, однако,[3, 4], который включает 4.Введено в версии 1.11.0.
Методы оценки оптимального количества интервалов хорошо обоснованы в литературе и вдохновлены выбором, который предоставляет R для визуализации гистограмм. Обратите внимание, что количество интервалов, пропорциональное
, является асимптотически оптимальным, поэтому оно присутствует в большинстве оценок. Это просто методы подстановки, которые дают хорошие начальные значения для числа интервалов. В уравнениях ниже
— ширина интервала, а
— число интервалов. Все оценки, которые вычисляют количество интервалов, преобразуются в ширину интервалов с помощью ptpданных. Окончательное количество интервалов получается из ``np.round(np.ceil(range / h))`.- ‘Auto’ (максимум оценок ‘Sturges’ и ‘FD’)
- Компромисс для получения хорошего значения. Для малых наборов данных обычно выбирается значение Sturges, а для больших наборов данных обычно используется FD. Избегает чрезмерно консервативного поведения FD и Sturges для малых и больших наборов данных соответственно. Точка переключения обычно
. - ‘FD’ (оценка Фридмана-Дикона)
-

Ширина интервала пропорциональна межквартильному размаху (IQR) и обратно пропорциональна кубическому корню из a.size. Может быть слишком консервативным для малых наборов данных, но достаточно хорошим для больших наборов данных. IQR очень устойчив к выбросам.
- ‘Scott’
-
![h = \sigma \sqrt[3]{\frac{24 * \sqrt{\pi}}{n}}](https://docs.scipy.org/doc/numpy-1.12.0/_images/math/baec7205229b9b4b064b5804e18773b552442812.png)
Ширина интервала пропорциональна стандартному отклонению данных и обратно пропорциональна кубическому корню из
x.size. Может быть слишком консервативным для малых наборов данных, но достаточно хорошим для больших наборов данных. Стандартное отклонение не очень устойчиво к выбросам. Значения очень похожи на оценку Фридмана-Дикона в отсутствие выбросов. - ‘Rice’
-

Количество интервалов пропорционально только кубическому корню из
a.size. Тенденция переоценивать количество интервалов, и не учитывает изменчивость данных. - ‘Sturges’
-

Количество интервалов равно логарифму по основанию 2 от
a.size. Эта оценка предполагает нормальное распределение данных и слишком консервативна для больших наборов данных, не имеющих нормального распределения. Это метод по умолчанию в R'shistметоде. - ‘Doane’
-
![n_h = 1 + \log_{2}(n) +
\log_{2}(1 + \frac{|g_1|}{\sigma_{g_1}})
g_1 = mean[(\frac{x - \mu}{\sigma})^3]
\sigma_{g_1} = \sqrt{\frac{6(n - 2)}{(n + 1)(n + 3)}}](https://docs.scipy.org/doc/numpy-1.12.0/_images/math/1065375284455afee96fe252a3bb475c17f67732.png)
Улучшенная версия формулы Стерджеса, которая дает лучшие оценки для наборов данных, не имеющих нормального распределения. Эта оценка пытается учесть асимметрию данных.
- ‘Sqrt’
-

Самая простая и быстрая оценка. Учитывает только размер набора данных.
Примеры
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3]) (array([0, 2, 1]), array([0, 1, 2, 3])) >>> np.histogram(np.arange(4), bins=np.arange(5), density=True) (array([ 0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4])) >>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3]) (array([1, 4, 1]), array([0, 1, 2, 3]))
>>> a = np.arange(5) >>> hist, bin_edges = np.histogram(a, density=True) >>> hist array([ 0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5]) >>> hist.sum() 2.4999999999999996 >>> np.sum(hist*np.diff(bin_edges)) 1.0
Введено в версии 1.11.0.
Пример автоматического выбора интервалов, используя случайные данные с 2 пиками и 2000 точками:
>>> import matplotlib.pyplot as plt >>> rng = np.random.RandomState(10) # deterministic random data >>> a = np.hstack((rng.normal(size=1000), ... rng.normal(loc=5, scale=2, size=1000))) >>> plt.hist(a, bins='auto') # plt.hist passes it's arguments to np.histogram >>> plt.title("Histogram with 'auto' bins") >>> plt.show()(Исходный код, png, pdf)
© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.histogram.html