2014-04-01 41 views
2

我需要在幾個14000x10000矩陣中存儲單詞共現計數。因爲我知道矩陣將會很稀疏,而且我沒有足夠的內存來存儲它們作爲密集矩陣,所以我將它們存儲爲scipy.sparse矩陣。從字典子集中有效填充SciPy稀疏矩陣

我發現收集要使用Counter對象的計數最有效的方法。現在我需要將Counter對象的計數傳遞給稀疏矩陣,但這需要很長時間。它目前需要18個小時才能填充矩陣。

我正在使用的代碼大致如下:

for word_ind1 in range(len(wordlist1)): 
    for word_ind2 in range(len(wordlist2)): 
     word_counts[word_ind2, word_ind1]=word_counters[wordlist1[word_ind1]][wordlist2[word_ind2]] 

word_counts是scipy.sparse.lil_matrix對象,word_counters是計數器的字典,wordlist1wordlist2是字符串列表。

有沒有辦法更有效地做到這一點?

+0

什麼是「word_counts」? –

+0

這是我試圖填充的稀疏矩陣。我剛剛編輯了這個問題。 – user3486648

+0

顯然,但是什麼類型的稀疏矩陣? –

回答

2

你正在使用LIL矩陣,(不幸)有一個線性時間插入算法。因此,以這種方式構建它們需要二次時間。嘗試使用DOK矩陣,那些使用散列表進行存儲。但是,如果您對布爾型術語出現感興趣,那麼如果您有一個稀疏術語 - 文檔矩陣,則計算共生矩陣要快得多。令A爲形狀(n_documents, n_terms)的矩陣,則共生矩陣爲

A.T * A 
+0

dok_matrix類型要快得多。感謝你的回答。 – user3486648