python 稀疏向量和矩陣的表示形式


 

http://blog.csdn.net/nkwangjie/article/details/17502443

http://blog.csdn.net/bitcarmanlee/article/details/52668477

 

稀疏矩陣有很多種,這里總結2種:

 

from scipy import sparse

 

 

1、csr_matrix  【行壓縮矩陣)   (與之對應,列壓縮舉證:csc_matrix】

csr_matrix,全名為Compressed Sparse Row,是按行對矩陣進行壓縮的。CSR需要三類數據:數值,列號,以及行偏移量。

CSR是一種編碼的方式,其中,數值與列號的含義,與coo里是一致的。

行偏移表示某一行的第一個元素在values里面的起始偏移位置。 
同樣在網絡上找了一張圖,能比較好反映其中的原理。 

CSR是比較標准的一種,也需要三類數據來表達:數值,列號,以及行偏移。CSR不是三元組,而是整體的編碼方式。

數值列號與COO一致,表示一個元素以及其列號,行偏移表示某一行的第一個元素在values里面的起始偏移位置。

如下圖中,第一行元素1是0偏移,第二行元素2是2偏移,第三行元素5是4偏移,第4行元素6是7偏移。在行偏移的最后補上矩陣總的元素個數,本例中是9。

 【備注】  列索引表示數值所在的列號,從0開始。值表示該數值。沒有行索引,行索引被壓縮,而在COO中,行索引沒被壓縮。這里用行偏移表示行索引,

其實就是把值作為一個列表后,指出值這個列表中哪個值是某一行的第一個元素。比如,下圖有4行,那么行索引有4個,0,2,4,7 分別表示,在值得列表中,第

0個,第2個,第4個,第7個分別為第1,2,3,4行的第一個元素,即值列表中的1,2,5,6。這樣有幾行數據,就只需要幾個行偏移值了。

最后一個9,表示非零元素一共有9個。

這里寫圖片描述

 

看看在python里怎么使用:

 

>>> from scipy.sparse import csr_matrix >>> 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]) >>> csr_matrix((data, indices, indptr), shape=(3, 3)).toarray() array([[1, 0, 2], [0, 0, 3], [4, 5, 6]])



2.coo_matrix

coo_matrix是最簡單的存儲方式。采用三個數組row、col和data保存非零元素的信息。這三個數組的長度相同,row保存元素的行,col保存元素的列,data保存元素的值。

一般來說,coo_matrix主要用來創建矩陣,因為coo_matrix無法對矩陣的元素進行增刪改等操作,一旦矩陣創建成功以后,會轉化為其他形式的矩陣。

>>> row = [2,2,3,2] >>> col = [3,4,2,3] >>> c = sparse.coo_matrix((data,(row,col)),shape=(5,6)) >>> print c.toarray() [[0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 5 2 0] [0 0 3 0 0 0] [0 0 0 0 0 0]]


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM