我使用 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/