numpy - 50Kx50K稀疏矩阵

标签 numpy scipy sparse-matrix

我需要保存一个 50,000x50,000 稀疏矩阵/二维数组,其中约 5% 的单元均匀分布,非空。我需要:

编辑 我需要在 numpy/scipy 中执行此操作,如果不清楚,抱歉。另外,还增加了要求。

  1. 从数据库中读取 5% 非空数据,并尽快将其分配给矩阵/二维数组单元。
  2. 使用尽可能少的内存。
  3. 使用花哨的索引(例如,获取列中的索引和所有非空值)。这是很好的,内存和构建时间更重要。
  4. 矩阵一旦构建就不会改变。
  5. 但是,我希望采用其转置,最好使用 O(1) 内存和时间。

实现这一目标的最有效方法是什么? 我可以用 nan 而不是零来表示“空”单元格吗? (0 对我来说是有效值),我可以有效地运行 nansum、nanmean 吗? 如果不是,我可以有效地获取给定列/行中所有非零的索引和值吗?

最佳答案

http://en.wikipedia.org/wiki/Sparse_matrix对几种不同方法进行了很好的总结。如果您从网站检索的数据是无序的,我建议使用“列表列表”(或者在这种情况下更有效 - 可能是列/值对列表的数组)。如果你能保证订购,我会推荐“耶鲁格式”。这两种解决方案都不需要存储 NAN,并且使 nanmean/nanaverage 速度更快。

这些解决方案的插入速度较慢。这些解决方案将使用整个矩阵的大约 10% 的空间。

关于numpy - 50Kx50K稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762585/

相关文章:

python - 在具有不同重数但相同维度的数组上同时使用 numpy repeat

python - 如何使用 Python 内置函数 odeint 求解微分方程?

python - 估计由一组点(Alpha 形状??)生成的图像区域

mongodb - 将mongodb中的唯一索引更改为稀疏唯一索引?

r - cbind 多个稀疏矩阵时获取 "node stack overflow"

numpy - 在NumPy中使用FFT时的频率单位

python - 如何修剪列表并生成 numpy 二维数组?

python - 如何在Python中加载Matlab的结构体(用v7.3保存)

python - 如何使用 CUDA 通过目前通过 scipy.sparse.csc_matrix.dot 实现的密集向量积来加速稀疏矩阵?

Python: h5py 给出 OSError: Can't read data (inflate() failed) 即使它之前打开过