(1)Coordinate (COO)
>>> row = np.array([0, 3, 1, 0])
>>> col = np.array([0, 3, 1, 2])
>>> data = np.array([6, 5, 7, 8])
>>> sparse.coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
array([[6, 0, 8, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
這是最簡單的一種格式供嚎,每一個(gè)元素需要用一個(gè)三元組來表示,分別是(行號(hào)峭状,列號(hào),數(shù)值)逼争,對(duì)應(yīng)上圖右邊的一列优床。這種方式簡單,但是記錄單信息多(行列)誓焦,每個(gè)三元組自己可以定位胆敞,因此空間不是最優(yōu)着帽。
(2)Compressed Sparse Column (CSC)
>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
CSC是按列存儲(chǔ)一個(gè)稀疏矩陣的。其中indptr中的數(shù)據(jù)代表矩陣中每一列所存的數(shù)據(jù)在data中的開始和結(jié)束的索引移层,例如這里indptr為[0, 2, 3, 6]仍翰,即表示在data中,索引[0, 2)為第一列的數(shù)據(jù)观话,索引[2, 3)為第二列的數(shù)據(jù)予借,索引[3, 6)為第三列的數(shù)據(jù)。而indices中的數(shù)據(jù)代表所對(duì)應(yīng)的data中的數(shù)據(jù)在其所在列中的所在行數(shù)频蛔,例如灵迫,這里的indices為[0, 2, 2, 0, 1, 2],表示在data中晦溪,數(shù)據(jù)1在第0行瀑粥,數(shù)據(jù)2在第2行,數(shù)據(jù)3在第2行三圆,數(shù)據(jù)4在第0行狞换,數(shù)據(jù)5在第一行,數(shù)據(jù)6在第2行舟肉。從而建立起一個(gè)稀疏矩陣修噪。
(3)Compressed Sparse Row (CSR)
>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
CSR是按行來存儲(chǔ)一個(gè)稀疏矩陣的,其原理與CSC類似度气。indptr中的數(shù)據(jù)表示矩陣中每一行的數(shù)據(jù)在data中開始和結(jié)束的索引割按,而indices中的數(shù)據(jù)表示所對(duì)應(yīng)的在data中的數(shù)據(jù)在矩陣中其所在行的所在列數(shù)×准可以看出适荣,在indptr、indices和data三個(gè)數(shù)組相同的情況下院领,通過CSC和CSR分別表示出來的矩陣互為轉(zhuǎn)置關(guān)系弛矛。