5

実際のコードは次のようになります。

def compute_score(row_list,column_list): 

    for i in range(len(row_list)):
            for j in range(len(column_list)):
                tf_score = self.compute_tf(column_list[j],row_list[i])

マルチプロセッシング、つまりjI want to poolのすべての反復を実現するために結び付けていますcolumn_list。関数が遅いのでcompute_tf、マルチプロセスしたい。

Pythonで使用する必要があることがわかりましたがjoblib、ネストされたループを回避することはできません。

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

これが達成すべきことです。これに関する解決策またはその他の解決策が提供されれば、非常に役立ちます。

4

2 に答える 2

14

ジェネレーター関数を実装する必要のない別の解決策は、ジェネレーターにネストされたリスト内包表記を使用することです。

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)]
于 2016-08-03T12:05:17.750 に答える
3

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,i を生成するジェネレーターを作成すると便利な場合があります。

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)]
于 2016-04-05T10:53:30.800 に答える