gpt4 book ai didi

Python 矩阵乘法

转载 作者:行者123 更新时间:2023-12-01 06:45:19 25 4
gpt4 key购买 nike

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

M = A - B^T C B

其中A、B、C是矩阵的 block 分量

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))

假设这是正确的操作,是否有更Pythonic的方式来编写这段代码?

亲切的问候!

编辑:

如果我使用 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

清楚地让读者知道这行代码发生了什么,并检查操作符顺序。

最佳答案

尝试@简写:

M = A - B.T @ C @ B

关于Python 矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59247486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com