如何使用HDF存储一个非常大的矩阵

时间:2014-04-15 13:58:34

标签: python matrix hdf

我打算用HDF存储一个非常大的矩阵,比如1e6 x 1e6的浮点数。

我需要按批次连续的行或列读取矩阵。

我的问题是,构建/调整HDF文件以最大化速度的最佳方式是什么?

有些观点:

  • 我估计读取/写入HDF中未压缩的完整矩阵在我的系统上需要大约5个小时。这是合理的,但是存储未压缩的矩阵是不合理的,因为它的大小将是几TB。

  • 如果矩阵稀疏,压缩会导致读取速度与读取未压缩的密集矩阵相比甚至更快吗?

  • 将矩阵分解为单独的子矩阵数据集会很烦人,因为它会使从原始矩阵读取行/列或执行矩阵乘法等操作变得复杂。所以我想尽可能避免这种情况(除非这给出了主要的速度优势)。

  • 读完矩阵一次后,我打算多读一遍。因此,读取/解压缩速度比写入/压缩速度更重要。

  • 我正在使用python h5py与hdf进行交互。

1 个答案:

答案 0 :(得分:0)

我假设您已经使用了一些稀疏表示,例如来自scipy.sparse的lil_matrix。

我看到两个合理的选择

1)您可以使用cPickle.dump将二进制内容转储到文件中,例如, Python: how do you store a sparse matrix using python?

2)您可以使用cPickle将内容转储到使用cPickle.dumps的字符串,然后使用h5py作为字符串存储您的内容

通常,处理大量数据的成本很高。使用例如lil_matrix对矩阵的操作是昂贵的,对磁盘的读/写需要花费所需的时间以表示方式存储数据。使用包含字符串的HDF5到原始C文件的开销是没有的(如果你关闭压缩)。我建议你关闭表达式,因为它不会减小很多(它已经很稀疏)。