大型多维数组导致内存泄漏,希望通过h5py数据集解决

时间:2014-11-12 15:15:23

标签: python multidimensional-array hdf5 h5py

这是对我打算做什么的简单提取

loop1 = range(10)
loop2 = range(10)
loop3 = range(100)

list = []
for l in loop1:
    for n in loop2:
       for m in loop3:
           list.append([l,n,m])

dSet = []
for l in list:
    matrix = np.ones((600,600))
    matrix = l[2]*matrix
    dSet.append(matrix)
由于将有1万个600 * 600矩阵,dSet无法容纳那么多数据并且每次都会导致内存泄漏。 所以我想使用h5py(hdf5)来存储dSet并为每100个for循环刷新到磁盘,有没有合适的解决方案?

非常感谢

1 个答案:

答案 0 :(得分:0)

当然你可以做到这一点,但这取决于你想做什么:

您想将10万个600x600矩阵中的每一个存储在自己的数据集中,还是想要一个巨大的矩阵(6000000x600)?

在第一种情况下,您为每个矩阵创建了自己的数据集dset = f.create_dataset("init", data=myData)

在第二种情况下,您必须在创建数据集后循环并以块的形式写入数据。这些方面的东西:

dset = f.create_dataset("MyDataset", (6000000x600,600), 'f')

for idx,l in enumerate(list):
    start = idx*600
    matrix = np.ones((600,600))
    matrix = l[2]*matrix
    dSet[start:start+600] = matrix

这仅在您事先知道总尺寸时才有效。如果不这样做,您可以使用可扩展数据集(有关详细信息,请参阅here