numpy.histogram_bin_edges
-
numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[source] -
Функция для вычисления только границ бинов, используемых функцией
histogram.- Параметры
-
-
aarray_like -
Входные данные. Гистограмма вычисляется по сглаженному массиву.
-
binsint or sequence of scalars or str, optional -
Если
binsявляется целым числом, оно определяет количество равномерно распределённых бинов в заданном диапазоне (по умолчанию 10). Еслиbinsявляется последовательностью, она определяет границы бинов, включая правую границу, что позволяет использовать неравномерные ширины бинов.Если
binsявляется строкой из списка ниже,histogram_bin_edgesбудет использовать выбранный метод для вычисления оптимальной ширины бина и, соответственно, количества бинов (подробнее о методах оценки см.Notes). Хотя ширина бина будет оптимальной для фактических данных в диапазоне, количество бинов будет вычислено для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать опцию «auto». Данные с весами не поддерживаются для автоматического выбора размера бинов.- ‘auto’
-
Максимум из оценок ‘sturges’ и ‘fd’. Обеспечивает хорошую общую производительность.
- ‘fd’ (оценка Фридмана-Дикона)
-
Робастная (устойчивая к выбросам) оценка, которая учитывает изменчивость и размер данных.
- ‘doane’
-
Улучшенная версия оценки Стерджеса, которая лучше работает с ненормализованными наборами данных.
- ‘scott’
-
Менее робастная оценка, учитывающая изменчивость и размер данных.
- ‘stone’
-
Оценка, основанная на оценке кросс-валидации с выбросом одного значения (leave-one-out) интегрированной квадратичной ошибки. Может рассматриваться как обобщение правила Скотта.
- ‘rice’
-
Оценка не учитывает изменчивость, а только размер данных. Часто переоценивает необходимое количество бинов.
- ‘sturges’
-
Метод по умолчанию в R, учитывает только размер данных. Оптимален только для гауссовых данных и недооценивает количество бинов для больших негауссовых наборов данных.
- ‘sqrt’
-
Оценка квадратного корня (размера данных), используемая Excel и другими программами из-за её скорости и простоты.
-
range(float, float), optional -
Нижний и верхний пределы бинов. Если не указано, диапазон просто
(a.min(), a.max()). Значения вне диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму.rangeтакже влияет на автоматическое вычисление бинов. Хотя ширина бина вычисляется оптимально на основе фактических данных вrange, количество бинов заполнит весь диапазон, включая части, не содержащие данных. -
weightsarray_like, optional -
Массив весов, имеющий такую же форму, как
a. Каждое значение вaвносит свой связанный вес в подсчёт бинов (вместо 1). В настоящее время это не используется ни одной из оценок размера бинов, но может быть использовано в будущем.
-
- Возвращает
-
-
bin_edgesarray of dtype float -
Границы для передачи в
histogram
-
См. также
Примечания
Методы оценки оптимального количества бинов хорошо обоснованы в литературе и вдохновлены выбором R для визуализации гистограмм. Обратите внимание, что количество бинов пропорционально
асимптотически оптимально, поэтому оно появляется в большинстве оценок. Это просто методы подстановки, которые дают хорошие начальные значения для количества бинов. В уравнениях ниже,
- это ширина бина, а
- количество бинов. Все оценки, которые вычисляют количество бинов, преобразуются в ширину бинов с использованием
ptpданных. Окончательное количество бинов получается изnp.round(np.ceil(range / h)).- ‘auto’ (максимум оценок ‘sturges’ и ‘fd’)
-
Компромисс для получения хорошего значения. Для небольших наборов данных обычно выбирается значение Стерджеса, а для больших наборов данных обычно используется FD. Избегает чрезмерно консервативного поведения FD и Стерджеса для малых и больших наборов данных соответственно. Точка переключения обычно
.
- ‘fd’ (оценка Фридмана-Дикона)
-
Ширина бина пропорциональна межквартильному размаху (IQR) и обратно пропорциональна кубическому корню от a.size. Может быть слишком консервативной для небольших наборов данных, но довольно хорошей для больших. IQR очень устойчив к выбросам.
- ‘scott’
-
Ширина бина пропорциональна стандартному отклонению данных и обратно пропорциональна кубическому корню от
x.size. Может быть слишком консервативной для малых наборов данных, но довольно хорошей для больших. Стандартное отклонение не очень устойчиво к выбросам. Значения очень похожи на оценку Фридмана-Дикона в отсутствие выбросов. - ‘rice’
-
Количество бинов пропорционально только кубическому корню от
a.size. Он имеет тенденцию переоценивать количество бинов и не учитывает изменчивость данных. - ‘sturges’
-
Количество бинов равно логарифму по основанию 2 от
a.size. Эта оценка предполагает нормальность данных и является слишком консервативной для больших, ненормальных наборов данных. Это метод по умолчанию в методе Rhist. - ‘doane’
-
Улучшенная версия формулы Стерджеса, которая даёт лучшие оценки для ненормализованных наборов данных. Эта оценка пытается учесть асимметрию данных.
- ‘sqrt’
-
Самая простая и быстрая оценка. Учитывает только размер данных.
Примеры
>>> arr = np.array([0, 0, 0, 1, 2, 3, 3, 4, 5]) >>> np.histogram_bin_edges(arr, bins='auto', range=(0, 1)) array([0. , 0.25, 0.5 , 0.75, 1. ]) >>> np.histogram_bin_edges(arr, bins=2) array([0. , 2.5, 5. ])
Для согласованности с гистограммой массив предварительно вычисленных бинов передаётся без изменений:
>>> np.histogram_bin_edges(arr, [1, 2]) array([1, 2])
Эта функция позволяет вычислить один набор бинов и повторно использовать его для нескольких гистограмм:
>>> shared_bins = np.histogram_bin_edges(arr, bins='auto') >>> shared_bins array([0., 1., 2., 3., 4., 5.])
>>> group_id = np.array([0, 1, 1, 0, 1, 1, 0, 1, 1]) >>> hist_0, _ = np.histogram(arr[group_id == 0], bins=shared_bins) >>> hist_1, _ = np.histogram(arr[group_id == 1], bins=shared_bins)
>>> hist_0; hist_1 array([1, 1, 0, 1, 0]) array([2, 0, 1, 1, 2])
Что даёт более легко сравнимые результаты, чем использование отдельных бинов для каждой гистограммы:
>>> hist_0, bins_0 = np.histogram(arr[group_id == 0], bins='auto') >>> hist_1, bins_1 = np.histogram(arr[group_id == 1], bins='auto') >>> hist_0; hist_1 array([1, 1, 1]) array([2, 1, 1, 2]) >>> bins_0; bins_1 array([0., 1., 2., 3.]) array([0. , 1.25, 2.5 , 3.75, 5. ])
© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.histogram_bin_edges.html