这是对我打算做什么的简单提取
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循环刷新到磁盘,有没有合适的解决方案?
非常感谢
答案 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)