Scipy - 乘以大型稀疏矩阵会导致分段错误?

时间:2015-04-28 16:12:51

标签: python numpy segmentation-fault scipy sparse-matrix

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

2 个答案:

答案 0 :(得分:0)

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

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

如果从unix shell运行应用程序,则分段错误很可能是由于进程内存不足。但是,如果你是从python shell运行的,那么你应该得到一个MemoryError

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

答案 1 :(得分:0)

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