【嵌牛導(dǎo)讀】 本文主要圍繞python模塊scipy中的稀疏矩陣展開
【嵌牛鼻子】scipy?稀疏矩陣
【嵌牛提問】python模塊scipy中的稀疏矩陣是如何存儲的呢?
【嵌牛正文】
參考文章:https://www.cnblogs.com/zhangchaoyang/articles/5483453.html
一:dok_matrix
繼承自dict,key是(row,col)構(gòu)成的二元組,value是非0元素。
優(yōu)點(diǎn):
1.非常高效地添加、刪除、查找元素
2.轉(zhuǎn)換成coo_matrix很快
缺點(diǎn):
1.繼承了dict的缺點(diǎn),即內(nèi)存開銷大
2.不能有重復(fù)的(row,col)
二:coo_matrix

如上圖,構(gòu)造coo_matrix需要3個等長的數(shù)組,values數(shù)組存放矩陣中的非0元素,row indices存放非0元素的行坐標(biāo),column indices存放非0元素的列坐標(biāo)。
優(yōu)點(diǎn):
1.容易構(gòu)造
2.可以快速地轉(zhuǎn)換成其他形式的稀疏矩陣
3.支持相同的(row,col)坐標(biāo)上存放多個值
缺點(diǎn):
1.構(gòu)建完成后不允許再插入或刪除元素
2.不能直接進(jìn)行科學(xué)計(jì)算和切片操作
三:csr_matrix

csr_matrix同樣由3個數(shù)組組成,values存儲非0元素,column indices存儲非0元素的列坐標(biāo),row offsets依次存儲每行的首元素在values中的坐標(biāo),如果某行全是0則對應(yīng)的row offsets值為-1。
優(yōu)點(diǎn):
1.高效地按行切片
2.快速地計(jì)算矩陣與向量的內(nèi)積
3.高效地進(jìn)行矩陣的算術(shù)運(yùn)行,CSR + CSR、CSR * CSR等
缺點(diǎn):
1.按列切片很慢(考慮CSC)
2.一旦構(gòu)建完成后,再往里面添加或刪除元素成本很高
四:dia_matrix

對角線存儲法,按對角線方式存,列代表對角線,行代表行。省略全零的對角線。(從左下往右上開始:第一個對角線是零忽略,第二個對角線是5,6,第三個對角線是零忽略,第四個對角線是1,2,3,4,第五個對角線是7,8,9,第六第七個對角線忽略)。
這里行對應(yīng)行,所以5和6是分別在第三行第四行的,前面補(bǔ)上無效元素*。如果對角線中間有0,存的時候也需要補(bǔ)0。
適用場景:
如果原始矩陣就是一個對角性很好的矩陣那壓縮率會非常高,比如下圖,但是如果是隨機(jī)的那效率會非常糟糕。