2016-04-05 2 views
1

実際のコードは次のようになります。 compute_tf機能が遅いので、私はそれをマルチプロセスしたいです。pythonでJOBLIBライブラリ内のネストされたループを使用する方法

私はPythonでjoblibを使用しなければならないことが判明しました。しかし、ネストされたループの回避策はありません。

Parallel(n_jobs=2)(delayed(self.compute_tf)<some_way_to_use_nested_loops>) 

これは達成すべきことです。 これに関するソリューションが提供されている場合、またはその他のソリューションがあれば、大きな助けになります。

答えて

4

ジェネレータ機能を実装することなく、別の解決策は、発電のためのネストされたリストの内包表記を使用することです。

Parallel(n_jobs=2)(delayed(self.compute_tf)(i, j) for j in column_list for i in row_list) 

順序は、以下のように与えられます。

[(i, j) for j in range(10) for i in range(10)] 
2

私はあなたのParallelについて理解していません。しかし、あなたのコードは、このように単純化することができます。

def compute_score(row_list,column_list): 

    for i in row_list: 
      for j in column_list: 
       tf_score = self.compute_tf(j,i) 

各Jを生成するジェネレータを作成するために有用であるかもしれない、私はあなたが使用

def compute_pairs(row_list,column_list): 

    for i in row_list: 
      for j in column_list: 
       yield j, i 

その後、発電機の外でそれらを処理できること:

scored = [compute_tf(j,i) for j, i in compute_pairs(row_list, column_list)] 
+0

'compute_pairs'も綴らする必要がありません - ' itertools.product'はまったく同じことを行います。 – user4815162342

関連する問題