喜欢乡亲,
我有一个生成矩阵的python进程。它们彼此堆叠在一起并保存为张量。这是代码
import tables
h5file = tables.open_file("data/tensor.h5", mode="w", title="tensor")
atom = tables.Atom.from_dtype(n.dtype('int16'))
tensor_shape = (N, 3, MAT_SIZE, MAT_SIZE)
for i in range(N):
mat = generate(i)
tensor[i, :, :] = mat
问题是当它达到8GB时内存不足。 HDF5格式不应该永远不会出现内存吗?就像在需要时将数据从内存移动到磁盘?
答案 0 :(得分:1)
当您使用PyTables时,HDF5文件将保留在内存中,直到文件关闭为止(请参阅此处:In-memory HDF5 files)。
我建议你看一下PyTables的append
和flush
方法,因为我认为这正是你想要的。请注意,每次循环迭代刷新缓冲区都会显着降低代码的性能,因为需要执行常量I / O.
同样将文件编写为块(就像将数据读入pandas中的数据帧一样)可能会引起您的兴趣 - 请参阅此处:PyTables optimization