【嵌牛導(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)點:
1.非常高效地添加坚芜、刪除览芳、查找元素
2.轉(zhuǎn)換成coo_matrix很快
缺點:
1.繼承了dict的缺點,即內(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)點:
1.容易構(gòu)造
2.可以快速地轉(zhuǎn)換成其他形式的稀疏矩陣
3.支持相同的(row,col)坐標(biāo)上存放多個值
缺點:
1.構(gòu)建完成后不允許再插入或刪除元素
2.不能直接進(jìn)行科學(xué)計算和切片操作
三: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)點:
1.高效地按行切片
2.快速地計算矩陣與向量的內(nèi)積
3.高效地進(jìn)行矩陣的算術(shù)運行峰弹,CSR + CSR、CSR * CSR等
缺點:
1.按列切片很慢(考慮CSC)
2.一旦構(gòu)建完成后芜果,再往里面添加或刪除元素成本很高
四:dia_matrix
對角線存儲法鞠呈,按對角線方式存,列代表對角線右钾,行代表行蚁吝。省略全零的對角線。(從左下往右上開始:第一個對角線是零忽略舀射,第二個對角線是5窘茁,6,第三個對角線是零忽略脆烟,第四個對角線是1山林,2,3邢羔,4驼抹,第五個對角線是7,8张抄,9砂蔽,第六第七個對角線忽略)。
這里行對應(yīng)行署惯,所以5和6是分別在第三行第四行的左驾,前面補上無效元素*。如果對角線中間有0,存的時候也需要補0诡右。
適用場景:
如果原始矩陣就是一個對角性很好的矩陣那壓縮率會非常高安岂,比如下圖,但是如果是隨機(jī)的那效率會非常糟糕帆吻。