首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HDF存储非常大的矩阵

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

Stack Overflow用户
提问于 2014-04-15 13:58:34
回答 1查看 401关注 0票数 1

我计划使用HDF来存储一个非常大的矩阵,类似于1e6x1e6的浮动。

我需要成批地读取连续行或列的矩阵。

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

以下几点:

  • 我估计在我的系统上读/写HDF中未压缩的全部矩阵大约需要5个小时。这是合理的,但不合理地存储矩阵未压缩,因为它将是几兆字节的大小。
  • 如果矩阵是稀疏的,压缩会导致读取速度比读取未压缩的密集矩阵更快吗?
  • 将矩阵分解成单独的子矩阵数据集会很烦人,因为这会使从原始矩阵读取一行/列或执行矩阵乘法之类的操作变得复杂。因此,如果可能的话,我想避免这样做(除非这给了我很大的速度优势)。
  • 在读了一次矩阵之后,我打算读很多遍。因此,读/解压缩速度比写/压缩速度更重要。
  • 我使用python h5py与hdf进行接口。
EN

回答 1

Stack Overflow用户

发布于 2014-04-15 14:42:07

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

我认为有两个可行的选择

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

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

一般来说,处理大量的数据是昂贵的。例如,当使用lil_matrix时,矩阵上的操作是昂贵的,对磁盘的读/写所需的时间是存储数据的方式。使用包含字符串的HDF5到原始C文件的开销是没有的(如果您关闭压缩)。我建议您关闭这个表达式,因为它不会大大缩小大小(它已经很稀疏了)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23085929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档