运行时间超长

2024-04-26 03:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

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\u decision函数时,它会花费很长时间。发生这种情况的原因和解决方法是什么?你知道吗


Tags: nprandommpmssigdldecisionmu
1条回答
网友
1楼 · 发布于 2024-04-26 03:13:35

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

相关问题 更多 >