![](/img/trans.png)
[英]Optimizing Python script for 200K row iteration over pandas DataFrame
[英]Fastest way to calculate pairwise comparison on 200k row MySQL database
我在MySQL数据库中存储了20万个列表。 给定一个列表A,我需要计算A与200k列表中每个列表X之间的相似度得分。 假设相似性度量很简单,例如A和X的交集的长度。
考虑到成对比较的本质,我想不出一种方法可以对此进行O(N)改进,因此,改善运行时意味着要使用多个CPU内核。 现在,我使用multithreading.Pool()将任务划分为4个核心,但仍需要近10分钟才能完成。 更糟糕的是,我的计算机已关闭以保护自己。
对于以前处理过此问题的任何人,您是否可以共享一种替代方法?
def bestmatch(A, lists):
a = set(A)
return min(lists, key=lambda x: len(set(x) & a)
使用min可以循环C速度。 lambda是一个快速引用的闭包。 set(A)
步骤仅计算一次,而不是在内循环中计算。
假设您的清单表格看起来像这样
LISTID LISTITEM
1 1
1 2
1 3
2 2
2 4
2 5
列表A是 [1,2]
,您可以在SQL中执行以下操作:
SELECT LISTID, COUNT(*)
FROM T
WHERE LISTITEM IN (1,2)
GROUP BY LISTID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.