簡體   English   中英

將超過 300000k 行與 scipy.integrate quad 集成非常慢

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

我在具有 366036 行的數據框“df_append”上使用以下定義,df 具有列 Fn 和

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 分鍾。 關於如何加快速度的任何想法?

看看你的 function

在此處輸入圖像描述

它將繪制高度為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 arrays,你可以簡單地寫

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

它的運行時間不到 0.1 秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM