2024-05-16 03:18:57 发布
网友
我在MySQL数据库中存储了200k个列表。给定一个列表a,我需要计算a和200k个列表中每个列表X之间的相似度得分。假设相似性度量很简单,比如A和X的集合交集的长度
考虑到成对比较的本质,我想不出一种方法来改进O(N),因此改进运行时意味着使用多个CPU内核。现在我把这个任务分成4个核心使用多线程.Pool(),但仍需要近10分钟才能完成。更糟的是,我的电脑关机保护自己。在
对于以前处理过这个问题的人,你有没有其他方法可以分享?在
def bestmatch(A, lists): a = set(A) return min(lists, key=lambda x: len(set(x) & a)
使用min执行循环a C速度。lambda是一个快速引用a的闭包。set(A)步骤只计算一次,而不是在内部循环中计算。在
set(A)
假设你的列表看起来像这样
LISTID LISTITEM 1 1 1 2 1 3 2 2 2 4 2 5
列表A是例如[1,2],可以在SQL中这样做:
[1,2]
使用min执行循环a C速度。lambda是一个快速引用a的闭包。
set(A)
步骤只计算一次,而不是在内部循环中计算。在假设你的列表看起来像这样
列表A是例如
^{pr2}$[1,2]
,可以在SQL中这样做:相关问题 更多 >
编程相关推荐