#python #numpy #dataset #histogram #binning
Вопрос:
У меня есть набор данных о расстояниях между двумя частицами, и я хочу поместить эти данные в пользовательские ячейки. Например, я хочу посмотреть, сколько значений расстояния лежит в интервале от 1 до 2 микрометров и так далее. Я написал код об этом, и, похоже, он работает. Это мой код для этой части:
#Custom binning of data
bins= [0,1,2,3,4,5,6,7,8,9,10]
fig, ax = plt.subplots(n,m,figsize = (30,10)) #using this because I actually have 5 histograms, but only posted one here
ax.hist(dist_from_spacer1, bins=bins, edgecolor="k")
ax.set_xlabel('Distance from spacer 1 [µm]')
ax.set_ylabel('counts')
plt.xticks(bins)
plt.show()
Однако теперь я хочу извлечь эти значения данных из интервалов и сохранить их в списках. Я пытался использовать:
np.histogram(dist_from_spacer1, bins=bins)
Однако это просто показывает, сколько точек данных находится в каждой ячейке и интервалы ячеек, точно так же, как это:
(array([ 0, 0, 44, 567, 481, 279, 309, 202, 117, 0]),
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
Как я могу получить точные данные, относящиеся к каждой ячейке гистограммы?
Комментарии:
1. Что ж, если вам нужны значения в
dist_from_spacer1
каждой ячейке, то они у вас уже есть в компактном представлении… В вашем примере значение 3 найдено 44, поэтому ячейка содержит список значений [3, 3, 3, 3, …, 3] 44-го размера. Я что-то пропустил? Вам нужны индексы вместо этого?
Ответ №1:
Да, np.histogram
вычисляет, что вам нужно для гистограммы, и, следовательно, конкретные точки данных не нужны, просто границы ячеек и подсчет для каждой ячейки. Однако границ ячеек достаточно, чтобы получить то, что вы хотите, используя np.digitizr
counts, bins = np.histogram(dist_from_spacer1)
indices = np.digitize(dist_from_spacer1, bins)
lists = [[] for _ in range(len(bins))]
[lists[i].append(x) for i, x in zip(indices, dist_from_spacer1)
В вашем случае границы ячеек предопределены заранее, поэтому вы можете использовать np.digitize
их напрямую