2013-04-02 21 views
21

Scipy有many different types of sparse matrices available。這些類型之間最重要的區別是什麼?它們的用途有什麼不同?Scipy稀疏矩陣 - 不同實現的目的和用法

我正在開發一個基於代碼示例代碼在Python中的代碼。一段代碼使用稀疏矩陣 - 在Matlab中似乎有一個(煩人的)類型,我試圖找出哪種類型的我應該在Python中使用。


1:這是一個類。大多數人都在用Matlab做這個項目,但我喜歡製造不必要的工作和困惑---顯然。

2:這是一個學術問題:我的代碼與'CSR'格式正常工作,但我很有興趣知道最佳用法是什麼。

+4

我相信對於大多數線性代數運算,CSR或CSC應該是您的首選選項,因爲大多數函數都是爲這些類型構建的。 BSR是CSR的塊版本。 COO和DOK方便數據輸入,但是一旦你輸入了所有數據,你就需要將其轉換爲其他類型之一。 LIL對切片等事情有更好的支持。不確定DIA適合線性代數運算。 – Jaime

+1

你應該接受這個問題的答案,將問題標記爲已解決:) – Will

回答

24

對不起,如果我沒有完全回答,但希望我能提供一些見解。

CSC(壓縮稀疏列)和CSR(壓縮稀疏行)更加緊湊和高效,但難以從頭開始構建。 Coo(座標)和DOK(鍵盤字典)更容易構建,然後可以通過matrix.tocsc()matrix.tocsr()轉換爲CSC或CSR。

CSC在訪問列向量或列操作時效率更高,一般情況下,它是以列的數組及其每行的值存儲的。

CSR矩陣是相反的;以行數組及其值存儲在每列中存儲,並且在訪問行向量或行操作時效率更高。