Как работает numpy.histogram()?

При чтении на numpy я обнаружил функцию numpy.histogram().

Что это такое и как это работает? В документах упоминаются корзины: что это такое?

Некоторые googling привели меня к определению гистограмм в целом. Я понимаю. Но, к сожалению, я не могу связать это знание с примерами, приведенными в документах.

Ответ 1

Буква представляет собой диапазон, который представляет ширину одного столбца гистограммы вдоль оси X. Вы также можете назвать этот интервал. (Википедия более формально определяет их как "непересекающиеся категории".)

Функция Numpy histogram не выводит гистограмму, но вычисляет входы входных данных, которые попадают в каждую ячейку, которая по очереди определяет область (не обязательно высоту, если ячейки не имеют одинаковой ширины ) каждого бара.

В этом примере:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

Имеется 3 бункера для значений от 0 до 1 (исключая 1), от 1 до 2 (исключая 2) и от 2 до 3 (включая 3), соответственно. Путь Numpy определяет эти ячейки, если, предоставив список разделителей ([0, 1, 2, 3]) в этом примере, хотя он также возвращает ячейки в результатах, поскольку он может автоматически выбирать их из ввода, если они не указаны. Если bins=5, например, он будет использовать 5 бункеров с разной шириной между минимальным входным значением и максимальным входным значением.

Входные значения: 1, 2 и 1. Следовательно, бит "1 до 2" содержит два вхождения (два значения 1), а бит "2 - 3" содержит одно вхождение (2). Эти результаты находятся в первом элементе возвращаемого кортежа: array([0, 2, 1]).

Так как бины здесь имеют одинаковую ширину, вы можете использовать количество вхождений для высоты каждого бара. Когда вы нарисованы, у вас будет:

  • строка высоты 0 для диапазона /bin [0,1] на оси X,
  • строка высоты 2 для диапазона /bin [1,2],
  • строка высоты 1 для диапазона /bin [2,3].

Вы можете построить это непосредственно с помощью Matplotlib (функция hist также возвращает ячейки и значения):

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()

enter image description here

Ответ 2

import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

Ниже hist указывает, что в ячейке № 0, 2 в ячейке № 1, 4 в ячейке №3, 1 в ячейке №4 есть 0 элементов.

print(hist)
# array([0, 2, 4, 1])   

bin_edges указывает, что бит # 0 является интервалом [0,1), бит # 1 равен [1,2),..., bin # 3 - [3,4).

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

Воспроизведите вышеуказанный код, измените ввод на np.histogram и посмотрите, как он работает.


Но картина стоит тысячи слов:

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   

enter image description here