使用 scipy.integrate quad 集成超过 300000k 行非常慢

Integrate over 300000k rows with scipy.integrate quad is very slow

我在具有 366036 行的数据框“df_append”上使用以下定义。 df 有列 Fn 和 a.

def f(r):
    return (((3*Fn[i])/(2*math.pi*a[i]**2))*(1-((r**2)/(a[i]**2)))**(1/2))

res = []
for i in range(len(df_append)):
    res += [(1/(-a[i]-a[i]))*(quad(f, a[i], -a[i])[0])]

而且速度非常慢,大约需要 10 分钟。关于如何加快它的任何想法?

看看你的功能

它会绘制一个半椭圆,高3Fn[i]/2*pi*a[i]**2,宽2*a[i]

因此您可以将整个集成替换为

res = []
for i in range(len(df_append)):
    res += [(3*Fn[i])/(8*a[i]**2)]

这应该会显着加快速度,运行 不到 1 秒。

如果您的 Fna 可以广播算术运算,例如numpy 数组,你可以简单地写

res = (3*Fn[i])/(8*a[i]**2);

并且 运行 不到 0.1 秒。