【问题标题】:Large on disk array for numpy用于 numpy 的大型磁盘阵列
【发布时间】:2012-04-25 16:06:28
【问题描述】:

我有一个稀疏数组,它似乎太大而无法在内存中有效处理(2000x2500000,浮点数)。我可以将它形成一个稀疏的 lil_array (scipy) 但是如果我尝试输出一个列或行压缩的稀疏数组 (A.tocsc(), A.tocsr()) 我的机器内存不足(而且两者之间也存在严重的不匹配文本文件中的数据 4.4G 和腌制的 lil 数组 12G - 如果磁盘格式更接近原始数据大小,那就太好了)。

将来我可能会处理更大的数组。

问题:以透明方式使用常规 numpy 函数的方式处理大型磁盘阵列的最佳方法是什么。例如,沿行和列的总和、向量积、最大值、最小值、切片等?

pytables 是要走的路吗?是否有一个好的(快速)sql-numpy 中间件层? numpy 内置磁盘阵列的秘密?

在过去使用(稍小)数组时,我总是将长计算结果pickel 缓存到磁盘。当阵列最终小于 4G 左右但不再适用时,此方法有效。

【问题讨论】:

  • 当你腌制你的数组时,你确定使用二进制协议吗?如果您使用的是默认文本协议,那么这可能是导致文件过大的原因。

标签: python arrays numpy sparse-matrix


【解决方案1】:

我经常使用memory-mapped numpy arrays 来处理数千兆字节的数字矩阵。我发现它们非常适合我的目的。显然,如果数据的大小超过了 RAM 的数量,则必须小心访问模式以避免thrashing

【讨论】:

  • 这可能是可行的,但对于稀疏数组来说似乎效率很低。有稀疏版吗?
  • @AnthonyBak:我不知道。但是,float32 的 2000x100000 密集数组的大小只有 800MB(在磁盘和内存中)。
  • 是的,我原来的问题中有一个错字。应该是 2000x2500000。
猜你喜欢
  • 2010-10-17
  • 2011-05-05
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多