我有一个像A * x = b
这样的线性系统,我想求解它。numpy
和numpy.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))