4D线性系统使用numpy



我有一个像A * x = b这样的线性系统,我想求解它。numpynumpy.linalg.solve很容易解决。

但是我的A是形状为(m, n, m, n)的4d数组,b是形状为(m, n)的2d数组,我想找到形状为(m, n)x。实际上我把A变换成形状为(m*n, m*n)Aexp,把b变换成形状为(m*n)bexp,找到xexp并变换回x。我的代码是

Aexp = np.zeros((m*n, m*n))
Bexp = np.zeros(m*n)
for i in range(m):
for j in range(n):
Bexp[i*n + j] = B[i, j]
for r in range(m):
for s in range(n):
Aexp[i*n + j, r*n + s] = A[i, j, r, s]
Xexp = np.linalg.solve(Aexp, Bexp)
X = np.zeros((n, m))
for i in range(m):
for j in range(n):
X[i, j] = Xexp[i*n+j]

但这并不好。有像X = solve(A, B)这样的功能吗?如果没有,我怎么能不使用循环呢?

我怎么能做3索引?A.shape = (m, n, p, m, n, p)B.shape = (m, n, p)

做一个numpy。重塑能适合吗?

import numpy as np
m = 2
n = 3
A = np.zeros((m,n, m,n))
B = np.zeros((m,n))
Aexp = A.reshape((m*n, m*n))
Bexp = B.reshape((m*n)) 

最新更新