的名單我要創建一個,做如下操作的應用(我有一次解析數據,並將它們存儲在數據庫中):找到所有常見的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