我有大量的数据存储在h5文件中。每个文件都有约1200个子文件夹,其中包含约65k列的表。我需要把数据放在直方图中,我不知道数据的范围。是否有一种方法可以同时读取和填充直方图
我尝试将数据添加到数组中,但如您所见,该数组包含约7800 m元素,用于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
循环之后制作临时直方图,然后求和为
hist_of_file += np.histogram(temp_hist,bins=bin_edges)
但它抱怨说ValueError: operands could not be broadcast together with shapes (1235,) (1234,)
和我必须在第一个数据输入之后定义bin_边。这并不理想,因为其他数据可能会溢出,但我不知道怎么做
您可以用内存效率高的方法来完成,但这需要两个过程。 首先,您应该循环遍历数据并找到最小值和最大值。然后,为柱状图选择存储箱数,并计算每个存储箱的值范围
例如,如果您的数据具有范围(0100),并且您想要一个10格柱状图,则范围将为[[0.0,10.0],[10.0,20.0],…[90.0100.0]]
然后,您应该创建一个长度等于存储单元数(这将是您的直方图)的整数数组,并用零初始化它
然后执行第二个循环,对于数据的每个元素,确定它对应的存储单元以及该存储单元的增量计数器。最后,直方图数组将包含您需要的数据
相关问题 更多 >
编程相关推荐