python - 为什么我使用 scipy 将两个 CSR 矩阵相乘时会消耗这么多内存?

标签 python numpy matrix scipy sparse-matrix

我使用 Scipy CSR representation一个 800,000x350,000 的矩阵,假设它是 M。我想计算点积 M * M[0:x].T。现在,根据 x 的值,内存消耗会增加。 x=1 并不明显,但如果 x=2000,则乘法过程需要大约 8 GB 的 RAM。

我想知道当我计算这个产品时会发生什么,以及为什么与存储稀疏矩阵(大约 30Mb)相比它需要这么多内存。矩阵是否为乘法展开?

最佳答案

通过调查随着时间的推移和每次操作后的结果和内存消耗,我发现原因是稀疏矩阵乘法的结果。 M 中确实有很多零值。但是 M*M.T 的结果是一个仅包含 50% 零的矩阵。因此结果消耗了大量内存。

示例:假设 M 的每个行向量在同一索引处都有一个非零字段,但除此之外是稀疏。那么 M*M.T 的结果将根本不是稀疏(没有零值)。

尽管如此,还是感谢您的帮助。

关于python - 为什么我使用 scipy 将两个 CSR 矩阵相乘时会消耗这么多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086431/

相关文章:

python - 在文件 Python 中进行条件搜索和替换

python - 在 block 矩阵中排列 numpy 数组

python - 循环 clump_masked 索引

python - 将文本添加到现有邮件正文中

python - 提取两个多行分隔符之间的内容并检查是否为空值

python - 如何计算权重以最小化方差?

python - Numpy 条件最大范围

matlab - 在 MATLAB 中按向量的元素缩放稀疏矩阵中的每一行

r - 如何从矩阵的列构造对 pmax 的函数调用

performance - 没有 for 循环的求和 - MATLAB