I have a linear system like A * x = b
that I want so solve. The numpy
solves it easily with numpy.linalg.solve
.
But my A
is a 4D-array of shape (m, n, m, n)
, b
is a 2D-array of shape (m, n)
and I want to find x
of shape (m, n)
.
Actually I transform A
into Aexp
of shape (m*n, m*n)
, and b
into bexp
of shape (m*n)
to find xexp
and transform back to x
.
My code is like
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]
But it's not nice. Is there a function like X = solve(A, B)
? If not, how could I do without using loops?
How could I do with 3 index? A.shape = (m, n, p, m, n, p)
and B.shape = (m, n, p)
CodePudding user response:
Does a numpy.reshape can be suitable?
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))