Как это делает numpy.гистограмма() работает?
во время чтения на numpy, я столкнулся с функцией numpy.histogram().
и как это работает? в документах они упоминают контейнеры: что это такое?
какой-то гуглинг привел меня к определение гистограмм в целом. Я понимаю. Но, к сожалению, я не могу связать эти знания с примерами, приведенными в документации.
3 ответов:
бин-это диапазон, представляющий ширину одного бара гистограммы вдоль оси 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. Таким образом, bin "1 to 2" содержит два вхождения (два
1значения), и bin "2 до 3" содержит одно вхождение (2). Эти результаты находятся в первом элементе возвращаемого кортежа:array([0, 2, 1]).поскольку ячейки здесь имеют одинаковую ширину, вы можете использовать количество вхождений для высоты каждого бара. При рисовании, вы бы:
- полоса высотой 0 для диапазона / бункера [0,1] на Ось Х,
- бар высоты 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()
import numpy as np hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))ниже
histуказывает, что есть 0 элементов в ячейке #0, 2 в ячейке #1, 4 в ячейке #3, 1 в ячейке #4.print(hist) # array([0, 2, 4, 1])
bin_edgesуказывает на то, что бункер #0 является интервал [0,1), бин #1 в [1,2), ..., Бен #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()
еще одна полезная вещь, чтобы сделать с
numpy.histogramдля построения выходных данных в виде координат x и y на линейном графике. Например:arr = np.random.randint(1, 51, 500) y, x = np.histogram(arr, bins=np.arange(51)) fig, ax = plt.subplots() ax.plot(x[:-1], y) fig.show()Это может быть полезным способом для визуализации гистограмм, где вы хотели бы более высокий уровень детализации без решеток везде. Очень полезно в гистограммах изображений для идентификации экстремальных значений пикселей.



Comments