我有一個相對較大的(〜3GB,300萬條目)的子列表列表,其中每個子列表包含一組標籤。這裏是一個非常簡單的例子:如何在Python列表中有效地計數共現
tag_corpus = [['cat', 'fish'], ['cat'], ['fish', 'dog', 'cat']]
unique_tags = ['dog', 'cat', 'fish']
co_occurences = {key:Counter() for key in unique_tags}
for tags in tag_corpus:
tallies = Counter(tags)
for key in tags:
co_occurences[key] = co_occurences[key] + tallies
這就像魅力,排序的,但它的實際數據集,其中有非常大的子表(30K〜總獨特的標記)超慢。任何python專業人士都知道我可以如何加速這件事?
作爲第一次近似嘗試bruteforce並用['joblib.Parallel'](https://pythonhosted.org/joblib/parallel.html)替換第一個forloop。請注意,在這種情況下,您需要一個Counter per-list而不是全局列表。 –
此外,您可能想要嘗試使用'line_profiler'來查看哪兩個塊(「Counter」調用或「co_occurences」更新更加昂貴)。 –
爲什麼你排序和什麼版本的Python? –