#python #numpy #matplotlib #histogram #histogram2d
#python #numpy #matplotlib #гистограмма #гистограмма2d
Вопрос:
Я работаю с очень большим набором данных на Python, поэтому я пытаюсь использовать гистограммы вместо массивов (массивы становятся слишком большими для сохранения / загрузки / отображения). Я просматриваю кучу файлов и извлекаю из них информацию, и я хотел бы затем взять информацию и впоследствии переделать гистограммы. Я могу сделать это с помощью одномерной гистограммы следующим образом:
counter, bins = np.histogram(nSigmaProtonHisto, bins=1000, range=(-10000, 10000))
nSigmaProtonPico[0] = counter
nSigmaProtonPico[1] = bins[:-1]
nSigmaProtonPico — это 2D-массив для хранения ребер ячеек и окончательного подсчета значений гистограммы. nSigmaProtonHisto — это одномерный массив для определенного события, и я перебираю миллионы событий. Как только скрипт будет выполнен, он будет сканировать все события, и у меня будет 2D-массив со значениями и позициями гистограммы. Я могу просто отобразить это, например:
plt.plot(nSigmaProtonPico[1], nSigmaProtonPico[0])
Когда я пытаюсь сделать это для 2D-гистограммы, она разваливается. Я что-то упускаю. Вот что у меня есть:
counter, bins1, bins2 = np.histogram2d(dEdX, pG, bins=1000, range=((0, 20), (-5, 5)))
dEdXpQPRIME[0] = counter[0]
dEdXpQPRIME[1] = counter[1]
dEdXpQPRIME[2] = bins1[:-1]
dEdXpQPRIME[3] = bins2[:-1]
Это дает мне кое-что, но я не могу понять, как построить график, чтобы воспроизвести гистограмму, которую я получил бы из всех данных. Я бы подумал, что это будет так же просто, как координаты x, y и z, но есть 4, а не 3 координаты.
Чего мне не хватает?
Ответ №1:
counter
является 2D-массивом. При условии, что у вас одинаковые ячейки при каждом вызове histogram2d
, вы получите массив одинакового размера. Поэтому вы можете просто добавить все counter
массивы. Рассмотрим:
x1, y1 = np.random.normal(loc=0,scale=1, size=(2,10000))
x2, y2 = np.random.normal(loc=3,scale=1, size=(2,10000))
x_bins = np.linspace(-5,5,100)
y_bins = np.linspace(-5,5,100)
H1, xedges, yedges = np.histogram2d(x1, y1, bins=(x_bins, y_bins))
H2, xedges, yedges = np.histogram2d(x2, y2, bins=(x_bins, y_bins))
H1
и H2
оба имеют форму (99,99)
(100 ребер в каждом измерении).
X, Y = np.meshgrid(xedges, yedges)
H = H1 H2
fig, axs = plt.subplots(1,3, figsize=(9,3))
axs[0].pcolormesh(X, Y, H1)
axs[1].pcolormesh(X, Y, H2)
axs[2].pcolormesh(X, Y, H)
Комментарии:
1. Глупый я; конечно, у меня должна быть матрица для ввода. Спасибо!