Python 无环法求解三维线性方程组

Python 无环法求解三维线性方程组,python,numpy,matrix,vectorization,Python,Numpy,Matrix,Vectorization,我要解线性方程Ax=b,每个A包含在3d矩阵中。比如说, 在Ax=B中, 假设A.shape为(2,3,3) i、 e.=[[1,2,3],[1,2,3],[1,2,3][[1,2,3],[1,2,3],[1,2,3]] B.形状为(3,1) i、 e.[1,2,3]^T 我想知道Ax=B的每个3-向量,即(x_1,x_2,x_3) 我想到的是将B与np.one(2,3)相乘,并将函数点与每个A元素的倒数相乘。但它需要循环来实现这一点。(当矩阵大小增大时,这会消耗大量时间)(例如A[:][:]=

我要解线性方程Ax=b,每个A包含在3d矩阵中。比如说,

在Ax=B中, 假设A.shape为(2,3,3)

i、 e.=[[1,2,3],[1,2,3],[1,2,3][[1,2,3],[1,2,3],[1,2,3]]

B.形状为(3,1) i、 e.[1,2,3]^T

我想知道Ax=B的每个3-向量,即(x_1,x_2,x_3)

我想到的是将B与np.one(2,3)相乘,并将函数点与每个A元素的倒数相乘。但它需要循环来实现这一点。(当矩阵大小增大时,这会消耗大量时间)(例如A[:][:]=[1,2,3]) 如何在没有循环的情况下求解多个Ax=B方程

  • 我让A和B的元素是一样的,但你们可能知道,这只是一个例子
对于可逆矩阵,我们可以在
3D
数组
A
上使用,然后使用张量矩阵与
B
相乘,这样我们就分别丢失了这两个数组的最后和第一个轴,如下所示-

np.tensordot( np.linalg.inv(A), B, axes=((-1),(0)))
np.matmul(np.linalg.inv(A), B)
样本运行-

In [150]: A
Out[150]: 
array([[[ 0.70454189,  0.17544101,  0.24642533],
        [ 0.66660371,  0.54608536,  0.37250876],
        [ 0.18187631,  0.91397945,  0.55685133]],

       [[ 0.81022308,  0.07672197,  0.7427768 ],
        [ 0.08990586,  0.93887203,  0.01665071],
        [ 0.55230314,  0.54835133,  0.30756205]]])

In [151]: B = np.array([[1],[2],[3]])

In [152]: np.linalg.solve(A[0], B)
Out[152]: 
array([[ 0.23594665],
       [ 2.07332454],
       [ 1.90735086]])

In [153]: np.linalg.solve(A[1], B)
Out[153]: 
array([[ 8.43831557],
       [ 1.46421396],
       [-8.00947932]])

In [154]: np.tensordot( np.linalg.inv(A), B, axes=((-1),(0)))
Out[154]: 
array([[[ 0.23594665],
        [ 2.07332454],
        [ 1.90735086]],

       [[ 8.43831557],
        [ 1.46421396],
        [-8.00947932]]])
或者,张量矩阵乘法可以替换为-

np.tensordot( np.linalg.inv(A), B, axes=((-1),(0)))
np.matmul(np.linalg.inv(A), B)
在Python3.x上,我们可以使用相同的功能-

np.linalg.inv(A) @ B

如果4d矩阵发生了什么?这有相同的程序吗@구마왕 是的,不需要更改。张量点中的负值“-1”是多少?我想应该是“1”@구마왕
-1
用于选择/表示最后一个轴。在Python中,它用于选择最后一个轴或最后一个元素等。因此,
-1
的用法是在这里使用的,而不是打字错误。