基本上,当我尝试在 numpy 矩阵上执行代数运算时,我在 python 中遇到内存错误。变量u
,是一个大的双精度矩阵(在失败的情况下,它是一个 288x288x156 双精度矩阵。我只在这个巨大的情况下得到这个错误,但我可以在其他大矩阵上执行此操作,只是没有这么大)。这是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
只是一个双倍,而u
and r
是上面描述的大矩阵(两者大小相同)。
我对内存错误了解不多,尤其是在 Python 中。任何解决此问题的见解/技巧将不胜感激!
Thanks
重写为
p *= alpha
u += p
这将使用更少的内存。然而p = p*alpha
为结果分配一个全新的矩阵p*alpha
然后丢弃旧的p
; p*= alpha
就地做同样的事情。
一般来说,对于大矩阵,尝试使用op=
任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)