一、matlab稀疏矩陣使用的數(shù)據(jù)結(jié)構(gòu)
Matlab中的稀疏矩陣(sparse matrix)使用的是壓縮列(Compressed Column)存儲(chǔ)方式,也叫CCS存儲(chǔ)方式,它是一種緊湊的存儲(chǔ)方式,適用于存儲(chǔ)大規(guī)模的稀疏矩陣。
CCS存儲(chǔ)方式是按照列來(lái)存儲(chǔ)非零元素的值和它們對(duì)應(yīng)的行下標(biāo)的一種方式。具體來(lái)說(shuō),CCS存儲(chǔ)方式使用三個(gè)數(shù)組來(lái)表示一個(gè)稀疏矩陣:
非零元素值數(shù)組(Values array):按照列的順序存儲(chǔ)所有非零元素的值。行下標(biāo)數(shù)組(Row index array):按照列的順序存儲(chǔ)所有非零元素的行下標(biāo)。列偏移數(shù)組(Column offset array):按照列的順序存儲(chǔ)所有非零元素值和行下標(biāo)數(shù)組的起始位置,它的長(zhǎng)度比列數(shù)多1。在CCS存儲(chǔ)方式中,一個(gè)稀疏矩陣的大小為 $m\times n$,非零元素的個(gè)數(shù)為 $p$,則Values數(shù)組和Row index數(shù)組的長(zhǎng)度為$p$,Column offset數(shù)組的長(zhǎng)度為$n+1$。對(duì)于一個(gè)稀疏矩陣中的第 $j$ 列,非零元素的值和行下標(biāo)存儲(chǔ)在Values數(shù)組和Row index數(shù)組的 $k$ 和 $k+1$ 位置上,其中$k$為Column offset數(shù)組中第 $j$ 列的位置。
CCS存儲(chǔ)方式的優(yōu)點(diǎn)是在存儲(chǔ)稀疏矩陣時(shí)可以充分利用非零元素的位置信息,使得存儲(chǔ)空間和計(jì)算時(shí)間大大降低,適用于大規(guī)模的稀疏矩陣計(jì)算。在Matlab中,當(dāng)一個(gè)矩陣中非零元素的比例小于0.05時(shí),該矩陣會(huì)被認(rèn)為是稀疏矩陣,并使用CCS存儲(chǔ)方式來(lái)存儲(chǔ)。