2016-10-21 35 views
4

で遅延私は二つの行列のPython、JOBLIBとの並列化:複数の引数

from joblib import Parallel, delayed 
import numpy 

def processInput(i,j): 
    for k in range(len(i)): 
     i[k] = 1 
    for t in range(len(b)): 
     j[t] = 0 
return i,j 

a = numpy.eye(3) 
b = numpy.eye(3) 

num_cores = 2 
(a,b) = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b)) 

上のforループ並列化するために次のようなものを使用していますが、私は次のエラーを取得しています:あまりにも多くの値を解凍します(予期された2)

遅れて2つの値を返す方法はありますか?またはあなたはどのような解決策を提案しますか?

また、ビットOPは、マトリックスを処理するために、次のようなコンパクトな方法があります(実際には何も変更しません)。

from joblib import Parallel, delayed 
def processInput(i,j): 
    for k in i: 
     k = 1 
    for t in b: 
     t = 0 
return i,j 

私がしかしの最初の部分への答えとして、実際のスクリプトで可能な悪い相互作用の下公演を避けるために(?)おそらく

答えて

3

を遅すぎる、とにかくhas_shareable_memoryの使用を避けたいですあなたの質問: あなたの遅れた関数でタプルを返してください。

return (i,j) 

そして、すべてのあなたの遅れの関数

results = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b)) 

の出力を保持する変数のために今それぞれいくつかの(i、j)をタプルのリスト保持しているとあなただけの結果を反復処理することができます結果。

関連する問題