假設我有其中我需要找到的總和的表達式:SciPy的/ numpy的:求和多個索引
其中界限是有限的和已知的。什麼是最快或最有效的方式去計算這樣的總和在scipy/numpy。它可以用嵌套for循環來完成,但有沒有更好的方法?
假設我有其中我需要找到的總和的表達式:SciPy的/ numpy的:求和多個索引
其中界限是有限的和已知的。什麼是最快或最有效的方式去計算這樣的總和在scipy/numpy。它可以用嵌套for循環來完成,但有沒有更好的方法?
如何
np.dot(x[:amax], np.cumsum(y[:amax] * np.sum(z[cmin:cmax])))
np.einsum
可能是這些類型的總和的選擇了。不過nevsan顯示,對於b
這是由a
限制,您需要首先使用np.cumsum
,np.einsum
應該不會在給出的示例中更快。
它可能看起來像這樣:
y_acc = np.add.accumulate(y[:amax]) # same as cumsum
result = np.einsum('i,i,j->', x[:amax], y_acc, z[cmin:cmax])
然而,這是increadibly慢,因爲einsum不優化的事實z
總和只需要進行一次,所以你需要手動重新制定它:
result = np.einsum('i,i->', x[:amax], y_summed) * z[cmin:cmax].sum()
應在這種情況下,然而應該是慢然後nevsan的np.dot
基礎的做法,因爲dot
一般應更好地優化(即np.einsum(ii->, a, b)
慢則np.dot(a, b)
)。但是,如果你有更多的數組來總結,這可能是一個不錯的選擇。