我有以下代码:
m1 = sig*np.random.randn(N)+mu
m2 = sig*np.random.randn(N)+mu
dl = np.random.uniform(low=0,high=600*Mp,size=N)
Mchirp = (m1+m2)*(m1*m2/(m1+m2)**2)**(3/5)
def SNR2(Mchirp,dl):
A = -(Mp/dl)*2*np.sqrt(5/(24*np.pi))*(G*Ms/(c**2*dl*Mp))*(G*np.pi*Ms/(c**3))**(-1/6)*(Mchirp/Ms)**(-5/6)
return A**2*integrate.quad(lambda f: f**(-2.3333)/S(f), 20, 1500, limit=1000)[0]
trigs = np.empty(N)
print trigs.shape
def trig_decision(SNR2):
for i in range(len(SNR2(Mchirp,dl))):
if SNR2(Mchirp,dl)[i] > SNRth:
trigs[i] = 1
else:
trigs[i] = 0
return trigs
trig_decision(SNR2)
我只是希望它从我的功能SNR2中获取52500个值的列表,并检查它们是否大于给定的阈值。当我刚运行SNR2(Mchirp,dl)时,运行大约需要3秒钟。但是当我运行trig_decision函数时,它需要永远。有没有理由发生这种情况,以及解决问题的方法?
答案 0 :(得分:3)
每次循环时,您都会再次运行SNR2()
。不要那样做!无论如何,使用enumerate
是更好的风格:
def trig_decision(SNR2):
for i, x in enumerate(SNR2(Mchirp, dl)):
if x > SNRth:
trigs[i] = 1
else:
trigs[i] = 0
return trigs
看起来似乎不应该存在全球性:
def trig_decision(SNR2):
return [int(x > SNRth) for x in SNR2(Mchirp, dl)]
trigs = trig_decision(SNR2)