提问人:Dev 提问时间:7/23/2023 最后编辑:Ξένη ΓήινοςDev 更新时间:7/23/2023 访问量:65
优化 Python 中用于阻抗计算的矩阵反转
Optimise matrix inversion in Python for impedance calculation
问:
为了获得电路的阻抗曲线,我使用了电路的导纳(G)和电容(C)矩阵。
我正在使用 Python 计算不同频率下的阻抗曲线,但问题是我需要反转矩阵以从导纳中获得阻抗,结果证明这是一个非常昂贵的循环操作。
对于我拥有的大型矩阵 (1000*1000),使用大约 1 秒反转矩阵,因此对于在下面运行 10^6 次迭代的循环,我得到了不合理的大执行时间。numpy.linalg.inv
需要一些关于如何优化这一点的指导,或者是否有任何方法可以绕过矩阵反转,但又能得到阻抗矩阵。
我的代码如下:
A = j*2*3.14*C #j 2pi C to create susceptance matrix when multiplied by freq below.
for freq in range (1, 100000000, 100):
Y = G + A * freq #admittance matrix
Z = np.linalg.inv(Y) #inverse the matrix to get impedance matrix
output[freq] = Z
我已经尝试过而不是使用反转。但执行时间仍然过长。numpy.linalg.solve
答: 暂无答案
评论
np.linalg.inv
之所以昂贵,是因为它及时运行。这是这里的主要瓶颈。AFAIK,只要您使用快速 BLAS,它就已经非常优化了(大多数机器默认都是这种情况)。您可以在计算过程中检查所有内核是否正在做一些工作。没有已知的真正更快的算法,所以这基本上是你能做的最好的(尽管通过一些小的优化,代码可能会稍微快一些)。运行大小为 1000x1000 的 100_000 矩阵反转是不合理的。矩阵是否特殊(例如稀疏)?O(n**3)
Y