Pythonic矩阵乘法

时间:2019-12-09 11:02:38

标签: python numpy matrix

我正在尝试为对称矩阵的Schur补码实现计算。该值的等式为:

M = A - B^T C B

其中A,B,C是矩阵的块成分

S = (A | B^T)
    (B | C )

假设我已经为A,B和C定义了numpy数组:

  • A是一个3x3矩阵
  • B是一个3x2矩阵
  • C是2x2矩阵

我已经执行了使用numpy获取S的操作:

 M = A - np.matmul(B.T, np.matmul(C, B))

假设这是正确的操作,是否还有更多的Python方式编写此代码?

亲切的问候!

修改:

如果我使用Python 3.5+,那么建议的@解决方案将是理想的选择。

我提出这个问题的原因是,如果正在执行一组复杂的矩阵乘法运算,则在每个步骤中都没有定义新变量的情况下,使用嵌套np.matmult()或np.dot()变得非常困难。

例如,对于等式M = A^-1 - C^TXC变为

np.linalg.inv(A) - np.dot(C.T, np.dot(X,C))

 np.linalg.inv(A) - np.matmult(C.T, np.matmult(X,C))

由于以下原因,嵌套使得更难检查操作员顺序是否正确:

np.linalg.inv(A) - np.matmult(C.T, np.matmult(X,C)) != np.linalg.inv(A) - np.matmult(C.T, np.matmult(C,X)) 

(在大多数情况下)

对比:

np.linalg.inv(A) - C.T @ X @ C

很显然,读者可以了解此行代码中发生了什么并检查操作员的顺序。

1 个答案:

答案 0 :(得分:1)

尝试@简写:

M = A-B.T @ C @ B