我有一個龐大的數據集,我必須計算它的每一個點的一系列屬性。我的代碼非常慢,我想讓它更快地並行化do循環。我希望每個處理器爲我的數據的有限子樣本計算「一系列屬性」,然後將所有屬性連接在一個數組中。 我會嘗試解釋我必須要做的一個例子。需要幫助來並行python循環
比方說,我的數據集是數組x
:
x = linspace(0,20,10000)
的「財產」我希望得到的是,例如,平方根x
:
prop=[]
for i in arange(0,len(x)):
prop.append(sqrt(x[i]))
問題我如何平行上面的循環?假設我有4個處理器,並且我希望每個處理器計算10000/4 = 2500點的sqrt。
我試着看過一些Python模塊,如multiprocessing
和mpi4py
,但從指南我找不到這樣一個簡單的問題的答案。
編輯
我要謝謝大家的寶貴意見和鏈接,您爲我提供。不過,我想澄清一下我的問題。無論如何,我對sqrt
功能不感興趣。 我正在循環中執行一系列操作。我完全知道循環是壞的,矢量操作總是比他們更可取,但在這種情況下,我真的必須做一個循環。我不會詳細討論我的問題,因爲這會給這個問題增加不必要的複雜性。 我想分割我的循環,以便每個處理器都能完成它的一部分,這意味着我可以用每個循環的1/40來運行我的代碼40次,並且合併結果,但這將是愚蠢的。 這是一個簡單的例子
for i in arange(0,len(x)):
# do some complicated stuff
我要的是用40級的CPU來做到這一點:
那是可能的,或者不使用Python?
對於這個特殊的例子,你會比使用'numpy.sqrt(x)'而不是Python循環的單純因子4快得多。你的真實任務可能也是如此。 –
感謝您的回答,但是我的真正任務比執行sqrt更復雜。我只是想知道爲什麼我找不到任何簡單的python循環並行化的例子。 – Brian
根據我的經驗,矢量化是在99%的情況下加速數值Python循環的方法,即使它們更復雜。描述你的真實功能,我可以告訴你如何進行矢量化。 –