带有np.diag()的Python内存错误

带有np.diag()的Python内存错误,python,out-of-memory,opticalflow,Python,Out Of Memory,Opticalflow,我想实现以下等式(Horn-Schunck方法的精确解): 我的代码: def HS_exact(Ix, Iy, It, u, v, lamda): M = u.shape[0] N = u.shape[1] nabla = np.zeros((M,N)) nabla = spnabla(M,N) transpose = np.transpose(nabla) u_0 = u v_0 = v Ix = Ix.flatten() Iy = Iy.flatten

我想实现以下等式(Horn-Schunck方法的精确解):

我的代码:

def HS_exact(Ix, Iy, It, u, v, lamda):
  M = u.shape[0]
  N = u.shape[1]
  nabla = np.zeros((M,N))
  nabla = spnabla(M,N)
  transpose = np.transpose(nabla)
  u_0 = u
  v_0 = v
  Ix = Ix.flatten()
  Iy = Iy.flatten()
  diag_Ix_squared = np.diag(Ix*Ix)
  diag_Ix_Iy = np.diag(Ix*Iy)
  diag_Iy_squared = np.diag(Iy*Iy)
  tmp = lamda*diag_Ix_squared
  A11 = transpose*nabla + tmp 
  A12 = lamda*diag_Ix_Iy
  A21 = lamda*diag_Ix_Iy
  A22 = transpose*nabla + lamda*diag_Iy_squared

当我尝试创建diag_Ix_squared时,出现了错误。我是python新手,不知道如何处理大型数组

现在我知道问题出在哪里了。我用密集矩阵代替稀疏矩阵

 Ix_flat = Ix.flatten()
 Iy_flat = Iy.flatten()
 diag_Ix_squared = sp.spdiags(Ix_flat*Ix_flat, 0, M*N, M*N)

这解决了我的问题。谢谢你们的帮助

Ix.shape
给了你什么?Ix的形状是(388L,584L)。Iy,它,u和v有完全相同的形状可能我不应该展平Ix。但是如果我不展平它,我就不能计算A11。然后只在计算
A11
之后展平它。如果我不展平它,我就不能得到正确的形状来计算A11。转置*nabla的形状是(226592226592),tmp的形状是(388L)。我错过什么了吗?