Python 如何使用HDF存储非常大的矩阵
我计划使用HDF来存储一个非常大的矩阵,比如1e6 x 1e6个浮点数 我需要以连续的行或列成批地读取矩阵 我的问题是,构造/调整HDF文件以使速度最大化的最佳方法是什么 有几点: 我估计在我的系统上读取/写入HDF中未压缩的完整矩阵大约需要5个小时。这是合理的,但存储未压缩的矩阵是不合理的,因为它的大小将为数TB 如果矩阵是稀疏的,压缩是否会导致读取速度与读取未压缩的密集矩阵相当,甚至更快 将矩阵分解为单独的子矩阵数据集会很烦人,因为这会使从原始矩阵读取行/列或执行矩阵乘法等操作变得复杂。因此,如果可能的话,我希望避免这种情况,除非这会带来很大的速度优势 在读了一次矩阵之后,我打算读很多遍。因此,读/解压缩速度比写/压缩速度更重要 我正在使用python h5py与hdf进行接口Python 如何使用HDF存储非常大的矩阵,python,matrix,hdf,Python,Matrix,Hdf,我计划使用HDF来存储一个非常大的矩阵,比如1e6 x 1e6个浮点数 我需要以连续的行或列成批地读取矩阵 我的问题是,构造/调整HDF文件以使速度最大化的最佳方法是什么 有几点: 我估计在我的系统上读取/写入HDF中未压缩的完整矩阵大约需要5个小时。这是合理的,但存储未压缩的矩阵是不合理的,因为它的大小将为数TB 如果矩阵是稀疏的,压缩是否会导致读取速度与读取未压缩的密集矩阵相当,甚至更快 将矩阵分解为单独的子矩阵数据集会很烦人,因为这会使从原始矩阵读取行/列或执行矩阵乘法等操作变得复杂。因此
我假设您已经在使用一些稀疏表示,例如scipy.sparse中的lil_矩阵 我认为有两个可行的选择 1您可以使用cPickle.dump将二进制内容转储到文件中,请参见例如。 2您可以使用cPickle将内容转储到使用cPickle.dumps的字符串中,然后使用h5py将内容存储为字符串 通常,处理大量数据的成本很高。使用例如lil_矩阵时,矩阵上的操作成本较高。磁盘的读/写操作需要花费一定的时间来存储数据。如果关闭压缩,则将包含字符串的HDF5用于原始C文件的开销将为零。我建议你关闭这个表达式,因为它不会减少太多的大小,它已经很稀疏了