我有一个复杂的2D数组(HH),我想对其进行反演,我只想要它的第一项,在3 for循环中迭代。对于合理大小的M,C,K(2D数组),它不会花费很长时间,但是如果我增加它们的大小,等待就会变得无限。 第三个循环中的一个循环计算HH[0,0]大约需要0.19秒,想象一下迭代2x20x500次需要很多时间。 我怎样才能加快这个过程
因为我无法上传M、C和K,所以我将它们替换为:inv((np.random.rand(10001000)+np.random.rand(10001000)*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,num_modes,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)+np.random.rand(1000,1000)*1j)
H11_1[h,j,iw] = HH[0,0]
我还尝试了这一点来加快速度:
H11_1 = np.zeros((num_harms,num_modes,len(w)),dtype = 'complex_') # dim(num_harms,num_modes,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,j,iw] = H_1
但似乎有这样的警告:
RuntimeWarning: overflow encountered in det
r = _umath_linalg.det(a, signature=signature)
我调试它以查看H_1值,它是:(-inf infj)
目前没有回答
相关问题 更多 >
编程相关推荐