Python LU分解的矩阵乘法问题?

Python LU分解的矩阵乘法问题?,python,numpy,scipy,linear-algebra,matrix-multiplication,Python,Numpy,Scipy,Linear Algebra,Matrix Multiplication,我试图用LU分解来解Ax=b,但不知何故,我无法通过乘以L*U得到A A = array([2,3,5,4]).reshape(2,2) b = array([4,3]) P,L, U = lu(A) 以及L和U的结果 L: array([[ 1. , 0. ], [ 0.4, 1. ]]) U: array([[ 5. , 4. ], [ 0. , 1.4]]) L*U的结果 dot(L,U): array([[ 5., 4.],

我试图用LU分解来解Ax=b,但不知何故,我无法通过乘以L*U得到A

A = array([2,3,5,4]).reshape(2,2)
b = array([4,3])
P,L, U = lu(A)
以及L和U的结果

L:

array([[ 1. ,  0. ],

      [ 0.4,  1. ]])

U:

array([[ 5. ,  4. ],

       [ 0. ,  1.4]])
L*U的结果

dot(L,U):

array([[ 5.,  4.],

       [ 2.,  3.]])

所以我得到的不是((2,3),(5,4)),而是((5,4.),(2,3.))。因此,我不能解Ax=b。得到这样的L*U结果的原因是什么?

哦,我似乎完全忘记了置换矩阵p。p的逆与L*U相乘解决了这个问题

dot(inv(P),dot(P,A)):

array([[ 2.,  3.],
       [ 5.,  4.]])
根据:PA=LU

因此,如果需要A=LU,可以将
permute\u l=True
添加到
LU
函数中:

(ins)>>> a = np.array([2,3,5,4]).reshape(2,2)
(ins)>>> l,u = scipy.linalg.lu(a, permute_l=True)
(ins)>>> l.dot(u)
array([[ 2.,  3.],
       [ 5.,  4.]])

或者您可以使用
L,U=scipy.linalg.lu(A,permute\U L=True)
。然后
L.dot(U)
与预期一致。