繁体   English   中英

运行时间超长

[英]runtime is super long

我有以下代码:

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函数时,它会花费很多时间。 是否有发生这种情况的原因以及解决该问题的方法?

每次循环时,您都会再次运行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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM