Считать элементы в массиве numpy между границами [duplicate]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

96
задан Salvador Dali 29 August 2015 в 20:52
поделиться

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. Поэтому бит "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 [/g0]

129
ответ дан Bruno 17 August 2018 в 13:53
поделиться

Еще одна полезная вещь, связанная с 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()

Это может быть полезным способом визуализации гистограмм, где вам нужен более высокий уровень детализации без баров во всем мире. Очень полезно в гистограммах изображений для определения экстремальных значений пикселей.

1
ответ дан Grr 17 August 2018 в 13:53
поделиться
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 [/g0]

57
ответ дан unutbu 17 August 2018 в 13:53
поделиться
  • 1
    Я думаю, что это было бы более точно: plt.bar(bin_edges[:-1], hist, width=1) и plt.xlim(min(bin_edges), max(bin_edges)), чтобы бары соответствовали ожидаемой их ширине (в противном случае может быть только меньший бит, не имеющий значений между ними). – Bruno 4 February 2012 в 17:39
  • 2
    Бруно, спасибо. Это, конечно, лучше. – unutbu 4 February 2012 в 17:57
  • 3
    Можно ли использовать "hist" полученный в вышеуказанном формате numpy в "plt.hist (...)" функционировать? Потому что в методе bar вы поставляете его как «y», тогда как здесь, в гистограмме, существует только x .. – kbg 18 June 2018 в 18:46
Другие вопросы по тегам:

Похожие вопросы: