基本上,当我尝试对 numpy 矩阵执行代数运算时,我在 python 中遇到了内存错误。变量 u
是一个大的 double 矩阵(在失败的情况下,它是一个 288x288x156 的 double 矩阵。我只在这个巨大的情况下得到这个错误,但我可以在其他大矩阵上做到这一点,只是没有这么大)。这是 Python 错误:
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
u = u + alpha*p
是失败的代码行。
alpha
只是一个 double,而 u
和 r
是上面描述的大矩阵(两者大小相同)。
我对内存错误知之甚少,尤其是在 Python 中。任何解决此问题的见解/提示将不胜感激!
谢谢
最佳答案
重写为
p *= alpha
u += p
这将使用更少的内存。而 p = p*alpha
为 p*alpha
的结果分配一个全新的矩阵,然后丢弃旧的 p
; p*= alpha
在原地做同样的事情。
一般来说,对于大矩阵,尽量使用 op=
赋值。
关于Python/Numpy 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318615/