运行时超长

时间:2014-07-28 19:06:35

标签: python function numpy runtime

我有以下代码:

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函数时,它需要永远。有没有理由发生这种情况,以及解决问题的方法?

1 个答案:

答案 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)