Numpy 制作更快的逆矩阵

问题描述

我有一个复杂的 2D 数组 (HH),我想对其进行逆运算,我只想要它的第一项,在 3 个 for 循环中迭代。对于合理大小的 M、C、K(二维数组),它不会花费很长时间,但如果我增加它们的大小,等待将变得无限。 第三个循环中的一个循环计算 HH[0,0] 大约需要 0.19 秒,想象一下迭代 2x20x500 次需要很多时间。 如何加快流程?

由于我无法上传 M、C 和 K,我将它们替换为: inv((np.random.rand(1000,1000)+np.random.rand(1000,1000)*1j)

import numpy as np
import numpy.linalg.inv as inv

num_harms = 2 # or 3                                                                            
num_modes = 20                                                                                                                                                                         
freq = np.linspace(1.0,4.0,500) #range force freq                                                     
w = 2*np.pi*freq                                                                                                                                                                 
H11_1 = np.zeros((num_harms,num_modes,len(w)),dtype = 'complex_') # dim(num_harms,step_freq)
for h in range(0,num_harms):                                                                       
    for j in range(0,num_modes):                                                                   
        for iw in range(0,len(w)):     
            # HH = inv((-((h+1)*w[iw])**2)*M[j]+(1j*(h+1)*w[iw]*C[j])+K[j])
            HH = inv((np.random.rand(1000,1000)*1j)
            H11_1[h,j,iw] = HH[0,0]

我也尝试过这样做以使其更快:

H11_1 = np.zeros((num_harms,step_freq) 
for h in range(0,num_harms):
    for j in range(0,num_modes):
        for iw in range(0,len(w)):    
            H = ((-((h+1)*w[iw])**2)*M[j]+(1j*(h+1)*w[iw]*C[j])+K[j])            
            H_1 = (np.linalg.det(A))
            H11_1[h,iw] = H_1

但是出现这个警告:

RuntimeWarning: overflow encountered in det                                                          
r = _umath_linalg.det(a,signature=signature)

我调试它以查看 H_1 值,它是:(-inf-infj)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)