优化这段涉及矩阵求逆的Python代码

问题描述 投票:0回答:1

我有这行涉及矩阵求逆的代码:

X = A @ B @ np.linalg.pinv(S)

A 是一个 n × n 矩阵,B 是一个 n × m 矩阵,S 是一个 m × m 矩阵。 m 比 n 小,但通常不会小几个数量级。通常m大约是n的一半。 S 是对称正定矩阵。

如何让这行代码在Python中运行得更快?

我可以做

 X = np.linalg.solve(S.T, (A@B).T).T 

但我也很好奇是否可以利用 S 是对称的这一事实。

python numpy matrix linear-algebra numerical-methods
1个回答
0
投票

所以你的问题是

XS = AB = C
。正如您所说,这可以重写为
S'X' = B'A' = C'
C
的大小为
m x n
,但是这个批量问题可以使用
scipy.linalg.solve
来解决。在这种情况下,我推荐使用 scipy 替代方案(而不是 numpy),因为您已经声明
S
是对称的,因此您可以传递
assume_a="sym"
参数,以便 scipy 选择利用矩阵结构的求解器。

所以,你的代码将如下所示:

X = scipy.linalg.solve(S.T, (A@B).T, assume_a="sym").T
© www.soinside.com 2019 - 2024. All rights reserved.