2014-12-01 82 views
1

我需要使用scikit-learn的pairwise_distances函數計算距離矩陣,我有一個相對較大的NumPy數組(近300k行和20列,儘管大多數值爲0)。哪個SciPy稀疏矩陣類最適合計算距離矩陣?

不幸的是,除非我將輸入數組轉換爲稀疏矩陣,否則這個過程會遇到內存錯誤。 SciPy提供了很多sparse matrix classes,我不知道哪一個最適合這種特殊情況。

我發現支持CSR或CSC的SO answer,但我不清楚哪一個最適合計算距離矩陣。歡迎任何建議!

+0

距離矩陣並不稀疏。那麼,如果你有很多重複的點,我認爲它可能會很少,但這種情況很少發生。 – jme 2014-12-01 19:38:57

+0

輸入數組,而不是距離矩陣,是我想要轉換爲稀疏矩陣的那個。 – 2014-12-01 19:41:36

+0

啊,我明白了。但即使如此,由此產生的距離矩陣將有'n'選擇2個條目,這對於'n' = 300,000而言肯定不會適合內存。所以將輸入數組轉換爲稀疏數組對我來說沒有什麼幫助,我想。 – jme 2014-12-01 19:44:39

回答

1

CSR按行排序,CSC按列排序。因此,使用CSC訪問行的速度會更快,訪問列的速度會更快。由於sklearn.metrics.pairwise.pairwise_distances用作輸入,因此X是行(實例和列是屬性),它將訪問稀疏矩陣中的行。因此使用CSR可能更有效率。