我正在尝试为对称矩阵的Schur补码实现计算。该值的等式为:
M = A - B^T C B
其中A,B,C是矩阵的块成分
S = (A | B^T)
(B | C )
假设我已经为A,B和C定义了numpy数组:
我已经执行了使用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
很显然,读者可以了解此行代码中发生了什么并检查操作员的顺序。
答案 0 :(得分:1)
尝试@简写:
M = A-B.T @ C @ B