python 如何在 joblib 库中使用嵌套循环
How to use nested loops in joblib library in python
实际代码如下:
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
函数很慢,我想对其进行多处理。
我发现必须使用 Python 中的 joblib
来做到这一点,但我无法使用嵌套循环来解决问题。
Parallel(n_jobs=2)(delayed(self.compute_tf)<some_way_to_use_nested_loops>)
这就是要实现的目标。
如果提供任何解决方案或任何其他解决方案,这将是一个很大的帮助。
我不理解你关于并行的部分。但是,您的代码可以简化为:
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)]
无需实现生成器函数的另一种解决方案是对生成器使用嵌套列表理解:
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)]
实际代码如下:
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
函数很慢,我想对其进行多处理。
我发现必须使用 Python 中的 joblib
来做到这一点,但我无法使用嵌套循环来解决问题。
Parallel(n_jobs=2)(delayed(self.compute_tf)<some_way_to_use_nested_loops>)
这就是要实现的目标。 如果提供任何解决方案或任何其他解决方案,这将是一个很大的帮助。
我不理解你关于并行的部分。但是,您的代码可以简化为:
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)]
无需实现生成器函数的另一种解决方案是对生成器使用嵌套列表理解:
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)]