Python/Numpy MemoryError
基本上,当我尝试在numpy矩阵上执行代数运算时,我在python中遇到内存错误。 变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Traceback (most recent call last): File"S:\\3D_Simulation_Data\\Patient SPM Segmentation\\20 pc t perim erosion flattop\\SwSim.py", line 121, in __init__ self.mainSimLoop() File"S:\\3D_Simulation_Data\\Patient SPM Segmentation\\20 pc t perim erosion flattop\\SwSim.py", line 309, in mainSimLoop u = solver.solve_cg(u,b,tensors,param,fdHold,resid) # Solve the left hand si de of the equation Au=b with conjugate gradient method to approximate u File"S:\\3D_Simulation_Data\\Patient SPM Segmentation\\20 pc t perim erosion flattop\\conjugate_getb.py", line 47, in solv e_cg u = u + alpha*p MemoryError |
我对内存错误了解不多,尤其是在Python中。 任何见解/提示解决此问题将不胜感激!
谢谢
改写为
1 2 | p *= alpha u += p |
这样会占用更少的内存。而
通常,对于大型矩阵,请尝试使用
我发现避免内存错误的另一个技巧是手动控制垃圾回收。当对象被删除或超出范围时,在执行垃圾回收之前,不会释放用于这些变量的内存。我发现使用大型numpy数组的某些代码中出现MemoryError,但是如果在适当的位置插入对gc.collect()的调用,则可以避免这种情况。
仅当使用" op ="样式运算符等不能解决您的问题时,才应考虑使用此选项,因为到处都有gc.collect()调用可能不是最佳的编码实践。
您的矩阵有288x288x156 = 12,939,264个条目,对于
如果可以使用稀疏矩阵,则可以节省大量内存。