Scipy - 将大稀疏矩阵相乘会导致分割错误



我有一个大小为 444075 x 444075 的 CSR 稀疏矩阵。我希望将其乘以它的转置。但是,当我m * m.T时,它会导致segmentation fault 11错误。这是内存问题吗,如果是,有没有办法为程序分配更多内存?有没有一个聪明的解决方法/黑客使用子例程从 scipy 其他例程乘以不同的方式?

解决了问题,原来这是一个内存问题。我在另一台机器上运行该操作并收到 MemoryIssue(而我的机器给出段错误),当给予更多内存时,它会变成"不允许的负维度错误",我认为这是计算中的整数溢出。

Scipy 在稀疏csr_matrix中为每个非零整数使用 8 个字节。如果 4GB 可用内存和 444075x444075 的矩阵大小,则不超过 0.272243315% 的矩阵元素可能不为零。

虽然原始矩阵可能只包含3348026个非零元素,但请记住,将矩阵与其转置相乘可能会生成填充更密集的结果矩阵。

如果从 unix shell 运行应用程序,则分段错误很可能是由于进程内存不足造成的。但是,如果您从python shell运行,则应获得MemoryError

python 可用的内存

取决于操作系统可用的物理 RAM 和虚拟内存量。您可以使用 psutil: print psutil.phymem_usage() 检查有多少内存可用。

相关内容

  • 没有找到相关文章

最新更新