同樣,我有一個關於大循環的問題。在其他編程語言中的Python循環傳輸
假設我有一個功能
limits
def limits(a,b):
*evaluate integral with upper and lower limits a and b*
return float result
A和B是我的存儲值a和b簡單np.arrays。現在我想計算積分300'000^2/2次,因爲A和B的長度都是300'000,積分是對稱的。
在Python中,我嘗試了幾種方法,如itertools.combinations_with_replacement
創建A和B的組合,然後將它們放入積分中,但需要大量時間並且內存完全超載。 有沒有什麼辦法,例如用另一種語言傳遞循環,以加快速度?
我想運行循環
for i in range(len(A)):
for j in range(len(B)):
np.histogram(limits(A[i],B[j]))
我覺得histrogramming的limits
回報是爲了不存儲增長正視其他陣列可取的。
從我讀的python不是真正的這個迭代ansatzes最好的選擇。
因此,如果是的話,在Python中用另一種語言評估這個循環是合理的,如何去做。我知道有些方法可以傳輸代碼,但我從來沒有這樣做過。
感謝您的幫助。
'itertools.combinations'和朋友產生迭代器。通常,你直接循環這些內容,而不是嘗試在內存中擴展它們(例如,通過將它們轉換爲列表)。您不需要隨機訪問的所有中介結果,對嗎? –
300k^2/2 = 450億。只是將它移植到另一種語言不會削減它,你需要強健的硬件和巧妙的優化才能開始。 – delnan
@MartijnPieters,不,我不需要中間結果,只是最後(histrogrammed)之一。 delnan,在C中有一段代碼,總共在4個小時內管理它。我想同樣高效。 – madzone