matlabのsparse行列
そもそもsparse行列の意味をよく理解していなかった.Wikipediaで調べたところ以下の様な解答を得た.
疎行列(そぎょうれつ)とは,成分のほとんどが零である行列のことをいう。スパース行列とも言う。
ほとんどってなんだろう.過半数?
matlabではsparse関数によってsparse行列をつくることができる.つまり「ほとんどが零である行列」をつくることができる.
a = sparse( i, j, s, m, n, nzmax)
i, j, sはそれぞれベクタ,m,nは行列の大きさである.nzmax個の非ゼロ要素を持つ行列をつくる.nzmaxは省略するとnzmax = length(s)が割り当てられる.
sparse行列を試しにつかってみると以下のようになる.
cm = sparse([1 1 2 2 3 3 4 5],[2 3 4 5 4 5 6 6],[2 3 3 1 1 1 2 3],6,6) cm = (1,2) 2 (1,3) 3 (2,4) 3 (3,4) 1 (2,5) 1 (3,5) 1 (4,6) 2 (5,6) 3
sparse関数の1つ目と2つ目のベクトルで行列の要素を指定して,3つ目のベクトルでその値を決めている.行列の大きさは6x6で,指定した値以外のところは勝手に0が入る.座標っぽい表現になっているけど,内部的には
cm <6x6 sparse double>
と6x6のdoubleの行列になっているようだ.
また,普通の行列とsparse行列へ変換,あるいはその逆の変換も可能.
sparse行列をsa,普通の行列をnaとすると
sa = sparse(na) na = full(sa)
とすれば,それぞれ変換ができる.