【问题标题】:Using memory mapped buffers for scipy sparse使用内存映射缓冲区进行 scipy 稀疏
【发布时间】:2018-04-14 19:26:46
【问题描述】:

我必须处理偶尔会非常大、接近或超过 RAM 容量的稀疏矩阵。我还需要支持mat*vecmat*mat操作。

由于csr_matrix 在内部是 3 个数组 dataindicesindptr,是否可以从 numpy memmap 创建一个 csr 矩阵。

【问题讨论】:

  • 我不知道它会如何工作。例如,访问csr 矩阵的一行需要从indptr 中获取一对值,并使用这些值从dataindices 数组中的每一个中获取一个切片。矩阵乘法例程使用 2 步调用编译代码。 sparse.save_npz 将这 3 个数组保存到 npz 存档中,存档中每个文件一个数组。
  • @hpaulj 从memmapped indptr 读取一对值并从memmapped dataindices 分别获取一个切片,您预计会遇到什么问题

标签: python numpy scipy sparse-matrix


【解决方案1】:

这可以部分工作,直到您尝试对数组做很多事情。如果子集化,子数组很有可能会被完全读入内存,否则会出错。

这里的一个重要考虑因素是,假设数组是典型的内存中 numpy 数组,编写底层代码。对于 mmapped 数组和内存数组,随机访问的成本非常不同。事实上,这里的大部分代码(在撰写本文时)都是 Cython 中的,它可能无法处理更多奇特的数组类型。

此外,只要内存中数组的行为相同,大部分代码都可以随时更改。当我了解到一些我使用的代码正在执行此操作时,这对我个人造成了伤害,但底层数组使用 h5py.Datasets。它运行得非常好,直到 scipy 的错误修复版本完全破坏了它。

【讨论】:

    【解决方案2】:

    这没有任何问题。

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 2021-06-23
      • 1970-01-01
      • 2022-07-15
      • 2015-07-28
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2018-01-11
      相关资源
      最近更新 更多