我需要保存一个 50,000x50,000 稀疏矩阵/二维数组,其中约 5% 的单元均匀分布,非空。我需要:
编辑 我需要在 numpy/scipy 中执行此操作,如果不清楚,抱歉。另外,还增加了要求。
- 从数据库中读取 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/