我有一个尺寸为444075 x 444075的scipy的CSR稀疏矩阵。我希望将它乘以它的转置。但是,当我执行m * m.T
时会导致segmentation fault 11
错误。这是一个内存问题,如果是这样,有没有办法为程序分配更多的内存?是否有一个聪明的解决方法/黑客使用子程序scipy的其他例程来增加不同的方式?
答案 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(而我的机器给出了一个段错误),当给出更多内存时,它变成了“负面维度不允许错误”很长一段时间,我认为这是一个整数溢出计算。