① scipy常見數據結構:coo_matrix、csc_matrix與csr_matrix
coo_matrix全稱是A sparse matrix in COOrdinate format,一種基於坐標格式的稀疏矩陣,每一個矩陣項是一個三元組(行,列,值)。
該矩陣的常見構造方法有如下幾種:
輸出為:
使用稠密二維數組構造
輸出為:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
輸出為:
array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
如果行列坐標有重復,對應的值直接累加,舉例如下:
輸出為:
array([[3, 0, 1, 0],
[0, 2, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 1]])
csr是Compressed Sparse Row matrix的縮寫即壓縮稀疏基於行存儲的矩陣,好繞口,該矩陣有如下幾種構造方法:
輸出為:
輸出為:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
輸出為:
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
按行存儲,即先存儲第0行,然後第1行,依次到最後一行,即先掃描row數組的數據,第一個數據是0即第0行,然後掃描col的第一個數據是0即第0列,那麼第0行第0列存儲的值就是data的第一個數據即1,然後繼續掃描row的第二個數據還是0即還是第0行,col對應的第二個數據是2即第2列,data的第二個數據是2,即第0行第2列的數據是2,依次掃描row,找對應的col和data構造稀疏矩陣。
輸出為:
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
csc是Compressed Sparse Column matrix的縮寫即基於列存儲的壓縮稀疏矩陣,該矩陣有如下幾種構造方法:
輸出如下:
和前面的csr的輸出對比可以看出該矩陣是按列逐個存儲。
輸出如下:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
輸出如下:
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
輸出如下:
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
coo_matrix由於構造方便容易理解,所以通常都是先構造該矩陣然後調用tocsr和tocsc函數來獲取另外兩種矩陣的存儲。
csr_matrix支持快速的按行切片,而csc_matrix則支持快速按列切片操作。