【问题标题】:Python spsolve ValueErrorPython解决ValueError
【发布时间】:2018-07-22 11:31:18
【问题描述】:

我正在尝试使用 spsolve 以规范形式求解系统。 不幸的是,我收到一条我不明白的错误消息。

我的代码

A11 = nablaTnabla + lamda*diag_Ix_squared
A12 = lamda*diag_Ix_Iy
A21 = lamda*diag_Ix_Iy
A22 = nablaTnabla + lamda*diag_Iy_squared 

b0 = lamda*(Ix*(Ix*u_0 + Iy*v_0 - It))
b1 = lamda*(Iy*(Ix*u_0 + Iy*v_0 - It))
A = np.matrix([[A11,A12],[A21,A22]])
b0 = b0.flatten()
b1 = b1.flatten()
b = np.array([b0,b1])
u,v = sp.linalg.spsolve(A,b)

我收到以下关于 spsolve 的错误消息: ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。

A 的形状为:(2,2) b 的形状为:(2, 226592)

我不知道如何解决这个错误。有谁能帮帮我吗?

【问题讨论】:

    标签: python-2.7 valueerror


    【解决方案1】:

    我发现了问题。我将稀疏矩阵与密集矩阵混淆了,因此 spsolve 无法计算系统。 变量 diag_Ix_squared 是一个稀疏矩阵,所以其余的也必须是一个。

      M = u.shape[0]
      N = u.shape[1]
      nabla = spnabla(M,N)
      nablaTnabla = nabla.T*nabla
      u_0 = u
      v_0 = v
      Ix_flat = Ix.flatten()
      Iy_flat = Iy.flatten()
      diag_Ix_squared = sp.spdiags(Ix_flat*Ix_flat, 0, M*N, M*N)
      diag_Ix_Iy = sp.spdiags(Ix_flat*Iy_flat, 0, M*N, M*N)
      diag_Iy_squared = sp.spdiags(Iy_flat*Iy_flat, 0, M*N, M*N)
    
      A11 = nablaTnabla + lamda*diag_Ix_squared
      A12 = lamda*diag_Ix_Iy
      A21 = lamda*diag_Ix_Iy
      A22 = nablaTnabla + lamda*diag_Iy_squared
    
      b0 = lamda*(Ix*(Ix*u_0 + Iy*v_0 - It))
      b0 = b0.ravel()
      b1 = lamda*(Iy*(Ix*u_0 + Iy*v_0 - It))
      b1 = b1.ravel()
    
    
      A = sp.bmat([[A11,A12],[A21,A22]])
    
      b =  np.concatenate((b0,b1))
    
      x = sp.linalg.spsolve(A,b)
      u = x[:M*N]
      v = x[M*N:]
      u = np.reshape(u, (M,N))
      v = np.reshape(v, (M,N))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多