【发布时间】:2020-07-16 11:41:15
【问题描述】:
我对进行 2D 数值积分很感兴趣。现在我正在使用scipy.integrate.dblquad,但速度很慢。请看下面的代码。我需要用完全不同的参数评估这个积分 100 次。因此,我想让处理尽可能快速和高效。代码是:
import numpy as np
from scipy import integrate
from scipy.special import erf
from scipy.special import j0
import time
q = np.linspace(0.03, 1.0, 1000)
start = time.time()
def f(q, z, t):
return t * 0.5 * (erf((t - z) / 3) - 1) * j0(q * t) * (1 / (np.sqrt(2 * np.pi) * 2)) * np.exp(
-0.5 * ((z - 40) / 2) ** 2)
y = np.empty([len(q)])
for n in range(len(q)):
y[n] = integrate.dblquad(lambda t, z: f(q[n], z, t), 0, 50, lambda z: 10, lambda z: 60)[0]
end = time.time()
print(end - start)
花费的时间是
212.96751403808594
这太过分了。请提出一种更好的方法来实现我想做的事情。在来这里之前我试图做一些搜索,但没有找到任何解决方案。我读过quadpy 可以更好更快地完成这项工作,但我不知道如何实现。请帮忙。
【问题讨论】:
-
您的代码目前似乎可以运行,并且您正在寻求改进它。一般来说,这些问题对于本网站来说过于固执己见,但您可能会在CodeReview.SE 找到更好的运气。记得阅读their requirements,因为他们比这个网站更严格。
-
@DavidBuck 非常感谢您的建议。如果您有这种感觉,我会将其发布在 CodeReview 上。我在这里发布它是因为我希望得到建议以及代码改进。如果其他人有同样的感觉,我会删除它。干杯:)
-
@David,您是否积极参与 CodeReview 并准备在那里回答这个问题?如果不是不推荐,尤其是对于
numpy问题。 -
您已经在stackoverflow.com/questions/60905349/… 中询问过
quadpy。在 SO 中,通常不赞成寻求其他软件包的建议来解决问题。 -
您需要承认并建立在上一个问题中获得的帮助。并尝试应用您从之前的 CR 发布中获得的反馈。
标签: python numpy scipy integration numerical-integration