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])

我正在努力实现多处理,即在j我想要池的每次迭代中column_list。由于compute_tf功能很慢,我想多处理它。

我发现必须joblib在 Python 中使用它,但我无法解决嵌套循环。

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 回答