我有以下 for 循环,它接受 2 个数组,模糊将第一列中的元素值与第二列中的元素进行匹配,并返回最接近的匹配项。 因为我正在使用的数据集很大,所以循环需要永远运行。有没有办法让我使用多处理来提高循环的速度?
def match(Col1,Col2):
overall=[]
for n in Col1:
result=[(fuzz.token_set_ratio(n, n2),n2)
for n2 in Col2 if fuzz.token_set_ratio(n, n2)>20
]
if len(result):
result.sort()
#print("CP4")
#print('result {}'.format(result))
print("Best Match={}".format(result[-1][1]))
overall.append(result[-1][1])
else:
overall.append(" ")
return overall ```
多处理。游泳池似乎适合您的用例。如果您希望不同的工作人员处理不同的Col1
元素:
def work(n):
result = []
for n2 in Col2:
token_set_ratio = fuzz.token_set_ratio(n, n2)
if token_set_ratio > 20:
result.append(token_set_ratio)
if result:
best_match = max(result)
print("Best Match={}".format(best_match))
return best_match
else:
return ' '
num_workers = 8
with multiprocessing.Pool(num_workers) as pool:
overall = pool.map(work, Col1)
请注意,我还包括了两个性能优化:
- 仅计算一次
fuzz.token_set_ratio(n, n2)
并重复使用结果; - 取列表的最大值
result
而不是排序,因为您只需要最佳匹配。这将复杂性从 O(n log(n(( 提高到 O(n(。