numpy.histogram_bin_edges
-
numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[source] -
Функция для вычисления только границ бинов, используемых функцией
histogram.Параметры: -
a : array_like -
Входные данные. Гистограмма вычисляется по сплющенному массиву.
-
bins : int or sequence of scalars or str, optional -
Если
binsявляется целым числом, оно определяет количество равномерных бинов в заданном диапазоне (по умолчанию 10). Еслиbinsявляется последовательностью, она определяет границы бинов, включая правую границу, что позволяет использовать неравномерную ширину бинов.Если
binsявляется строкой из списка ниже,histogram_bin_edgesбудет использовать выбранный метод для вычисления оптимальной ширины бина и, следовательно, количества бинов (см.Notesдля получения более подробной информации об оценщиках) из данных, которые попадают в запрашиваемый диапазон. В то время как ширина бина будет оптимальной для фактических данных в диапазоне, количество бинов будет вычислено для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать опцию «auto». Данные с весами не поддерживаются для автоматического выбора размера бина.- ‘auto’
-
Максимум из оценщиков ‘sturges’ и ‘fd’. Обеспечивает хорошую общую производительность.
- ‘fd’ (Оценка Фридмана-Диконаса)
-
Робастная (устойчивая к выбросам) оценка, которая учитывает изменчивость данных и размер данных.
- ‘doane’
-
Улучшенная версия оценки Стерджеса, которая работает лучше с наборами данных, не являющимися нормальными.
- ‘scott’
-
Менее робастная оценка, учитывающая изменчивость данных и размер данных.
- ‘rice’
-
Оценка не учитывает изменчивость, а только размер данных. Часто переоценивает необходимое количество бинов.
- ‘sturges’
-
Метод по умолчанию в R, учитывает только размер данных. Оптимален только для нормальных данных и недооценивает количество бинов для больших наборов данных, не являющихся нормальными.
- ‘sqrt’
-
Оценка квадратного корня (от размера данных), используемая Excel и другими программами из-за скорости и простоты.
-
range : (float, float), optional -
Нижний и верхний пределы бинов. Если не указано, диапазон просто
(a.min(), a.max()). Значения вне диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму.rangeтакже влияет на автоматическое вычисление бинов. В то время как ширина бина вычисляется как оптимальная на основе фактических данных вrange, количество бинов будет заполнять весь диапазон, включая части, не содержащие данных. -
weights : array_like, optional -
Массив весов, имеющий такую же форму, как и
a. Каждое значение вaвносит свой связанный вес в счет бинов (вместо 1). В настоящее время это не используется ни одним из оценщиков бинов, но может быть использовано в будущем.
Возвращаемое значение: -
bin_edges : array of dtype float -
Границы, которые нужно передать в
histogram
См. также
Примечания
Методы оценки оптимального количества бинов хорошо обоснованы в литературе и вдохновлены выбором, предоставляемым R для визуализации гистограмм. Обратите внимание, что количество бинов пропорционально
является асимптотически оптимальным, поэтому оно появляется в большинстве оценщиков. Это просто методы подстановки, которые дают хорошие начальные значения для количества бинов. В приведенных ниже уравнениях
- это ширина бина, а
- количество бинов. Все оценщики, которые вычисляют количество бинов, пересчитываются в ширину бинов с использованием
ptpданных. Конечное количество бинов получается изnp.round(np.ceil(range / h)).- ‘Auto’ (максимум из оценщиков ‘Sturges’ и ‘FD’)
- Компромисс для получения хорошего значения. Для небольших наборов данных обычно выбирается значение Sturges, а для больших наборов данных обычно используется FD. Избегает чрезмерно консервативного поведения FD и Sturges для малых и больших наборов данных соответственно. Точка переключения обычно
.
- ‘FD’ (Оценка Фридмана-Диконаса)
-
Ширина бина пропорциональна межквартильному размаху (IQR) и обратно пропорциональна кубическому корню от a.size. Может быть слишком консервативной для небольших наборов данных, но довольно хорошей для больших наборов данных. IQR очень устойчив к выбросам.
- ‘Scott’
-
Ширина бина пропорциональна стандартному отклонению данных и обратно пропорциональна кубическому корню от
x.size. Может быть слишком консервативной для небольших наборов данных, но довольно хорошей для больших наборов данных. Стандартное отклонение не очень устойчиво к выбросам. Значения очень похожи на оценку Фридмана-Диконаса в отсутствие выбросов. - ‘Rice’
-
Количество бинов пропорционально только кубическому корню от
a.size. Он имеет тенденцию к переоценке количества бинов и не учитывает изменчивость данных. - ‘Sturges’
-
Количество бинов - это логарифм по основанию 2 от
a.size. Этот оценщик предполагает нормальность данных и является слишком консервативным для больших наборов данных, не являющихся нормальными. Это метод по умолчанию в методеhistв R. - ‘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; hist1 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.histogram_bin_edges.html