У меня огромное количество данных, хранящихся в файлах h5. Каждый файл имеет ~ 1200 подпапок, в которых есть таблицы с ~ 65 тыс. Столбцов. Мне нужно поместить данные в гистограмму, и я не знаю диапазон данных. Есть ли способ читать и заполнять гистограммы одновременно?
Я пытался добавить данные в массив, но, как вы можете видеть, массив имеет ~ 780M элементов для 10 файлов:
import h5py
import numpy as np
import matplotlib.pyplot as plt
aiArr = []
### FILES
for ff in range(0,10):
f= h5py.File('/data/file'+str(ff)+'.h5','r')
### KEYS
for i,key in enumerate(f.keys()):
if ff==0 and i==0:
aiArr = np.array(f[key]['AI'][()])[0]
else:
aiArr = np.append( aiArr , np.array(f[key]['AI'][()])[0] ,axis=0 )
plt.hist(aiArr,bins='auto')
plt.savefig('hist_0.png')
В качестве альтернативы я сделал временные гистограммы после key
l oop, а затем суммировал их как hist_of_file += np.histogram(temp_hist,bins=bin_edges)
, но он жалуется, что ValueError: operands could not be broadcast together with shapes (1235,) (1234,)
и мне пришлось определить bin_edges после первого ввода данных. Это не идеально, так как остальные данные могут его переполнить, но я не знаю, как это сделать.