Python/Numpy 内存错误

标签 python memory numpy scipy

基本上,当我尝试对 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,而 ur 是上面描述的大矩阵(两者大小相同)。

我对内存错误知之甚少,尤其是在 Python 中。任何解决此问题的见解/提示将不胜感激!

谢谢

最佳答案

重写为

p *= alpha
u += p

这将使用更少的内存。而 p = p*alphap*alpha 的结果分配一个全新的矩阵,然后丢弃旧的 pp*= alpha 在原地做同样的事情。

一般来说,对于大矩阵,尽量使用 op= 赋值。

关于Python/Numpy 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318615/

相关文章:

python - ROS帧变换(相机到底座)

python - Tensorflow 2.0 : Can I change the settings on a Tf. data.Dataset——特别是 `repeat()` 功能?

python - 从元组列表创建格式化表

c - 在c程序中,为什么osx中的字符串(从strcpy复制)的释放内存不可用?

python-3.x - 如何将数组列表划分为子数组?

python - NumPy 中的模型测量和误差

python - pipenv shell在虚拟环境中启动子shell… 'powershell.exe'无法识别为内部或外部命令,可操作程序或

java - 运行后如何找到 Javas 堆的最大大小?

performance - 内存数据布局 vs 算法性能

python - 从数组中删除元素