的名单我要创建一个,做如下操作的应用(我有一次解析数据,并将它们存储在数据库中):找到所有常见的N大小的元组的元组
我给ķ元组(具有K超过1000000)和每个元组是在
(UUID, (tuple of N integers))
形式,例如,假设N等于20,用于每k元组,并且每20大小的元组被排序。 我在以下两种形式(2个不同的表)救了我的所有数据在数据库中,这样我可以更容易地处理它们:
- _id,UUID,tuple.as_a_string()
- _id, UUID,1st_elem,2nd_elem,3rd_3lem,... 20th_elem
的目标是从元组的列表,如那些元组的每一个到一个以上的20大小的存在找到所有10级的元组元组**。**
例如,如果我们给出两个关注荷兰国际集团20大小的元组:
(1, (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,161,17,18,19,20))
(2, (1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39))
共用元组是:(1,3,5,7,9,11,13,15,17,19)
这是一个10大小的元组,所以结果是类似以下内容:
(1, 2, (1,3,5,7,9,11,13,15,17,19))
为了做到这一点,有什么我目前做的是(在Python 3):
- 创建一组与20的元素-si数据库中第一行的元组。
- 使用数据库中其余行的20个元组的元素为每一行创建一个集合。
- 对于第二组列表中的每个集合,我都与第一组相交。
- 然后,我创建了交叉点与10个元素(在Python中是itertools.combinations(new_set,10))的组合,它给了我想要的结果。
但是这个程序是很慢。即使使用多处理技术来充分利用我的8个CPU内核,每个计算都需要一个不同的编号,但这需要花费很长时间。我现在有2天的计划,只有20%。
您对如何优化流程有任何建议吗? NumPy阵列可以帮助执行速度吗? SQL中有什么方法可以计算每行所需的内容,即使是每行一行?
在此先感谢。
为什么这个标记的SQL?你的数据表示是什么? –
对不起。我的意思是只用SQLite标记。我错过点击。我的数据是大小为20的整数的元组,每个元组都有唯一的ID分配给元组。 – TIMace
如果它是sqlite的,你不应该写SQL来做到这一点,而不是python? – deltaskelta