使用HDF5(Python,PyTables)保存大型数组时内存不足

时间:2017-05-22 15:59:17

标签: python hdf5 pytables bigdata

喜欢乡亲,

我有一个生成矩阵的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格式不应该永远不会出现内存吗?就像在需要时将数据从内存移动到磁盘?

1 个答案:

答案 0 :(得分:1)

当您使用PyTables时,HDF5文件将保留在内存中,直到文件关闭为止(请参阅此处:In-memory HDF5 files)。

我建议你看一下PyTables的appendflush方法,因为我认为这正是你想要的。请注意,每次循环迭代刷新缓冲区都会显着降低代码的性能,因为需要执行常量I / O.

同样将文件编写为块(就像将数据读入pandas中的数据帧一样)可能会引起您的兴趣 - 请参阅此处:PyTables optimization