MATLAB Function Reference | ![]() ![]() |
表示
S = sparse(A) S = sparse(i,
j,
s,
m,
n,
nzmax) S = sparse(i,j,
s,
m,
n) S = sparse(i,
j,
s) S = sparse(m,
n)
詳細
関数 sparse
は、行列を MATLAB
のスパースストレージ構造で作成します。
S = sparse(A)
は、ゼロ要素を取り除いてフル行列をスパース型の行列に変換します。S
が、既にスパースの場合、sparse(S)
は、S
を出力します。
S = sparse(i,j,s,m,n,nzmax)
は、ベクトル i
, j
, s
を使い、nzmax
個の非ゼロ要素に対して割り当てられるスペースをもつ
m
行n
列のスパース行列を作成します。s
のゼロ要素は、i
と j
の対応する値と共に無視されます。ベクトルi
,
j
, s
は、同じ長さです。重複する i
と j
の値をもつ S
の任意の要素が付け加えられます。
この 6 個の引数コールを簡略化するために、i
,
j
, s
が同じ長さである場合、引数 s
と引数
i
、または、j
のいずれかに対して、スカラを使うことができます。
S = sparse(i,j,s,m,n)
は、 nzmax
=
length(s)
を使います。
S = sparse(i,j,s)
は、m
=
max(i)
と n
=
max(j)
を使います。s
のゼロを削除する前に最大値が計算されるので、[i
j
s]
の行の 1 つは、 [m
n
0]
になる場合があります。
S = sparse(m,n)
は、sparse([],[],[],m,n,0)
の省略形です。これは、m
行 n
列のすべての要素がゼロのスパース行列を作成します。
注意
すべての MATLAB 組み込みの代数、論理、インデックス演算は、スパース行列、または、スパース行列とフル行列が混在したものに適用できます。スパース行列での演算はスパース行列を出力し、フル行列での演算ではフル行列を出力します。
ほとんどの場合、スパース行列とフル行列が混在した演算では、フル行列を出力します。しかし、例外的に、混在した行列演算も結果が構造的にスパースになる場合があります。たとえば、A.
*S
は、少なくとも S
と同じくらいスパースです。
例題
S
=
sparse(1:n,1:n,1)
は、n
行n
列のスパース表現の単位行列を作成します。S
=
sparse(eye(n,n))
で同じ S
が作られますが、これは要素のほとんどがゼロである
n
行n
列のフル行列を一時的に作ります。
B
=
sparse(10000,10000,pi)
は、たぶん有用ではありませんが、正しく実行されます。これは、非ゼロ要素を
1 つだけもつ 10000
行 10000
列の行列を作ります。これは、メモリを 800
メガバイト必要とするので、full(B)
は試みないでください。
[i,
j,
s] = find(S); [m,
n] = size(S); S = sparse(i,
j,
s,
m,
n);
最後の行と列が、非ゼロ要素をもつ場合、つぎのステートメントを実行してください。
[i,
j,
s] = find(S); S = sparse(i,
j,
s);
参考
sparfun
ディレクトリdiag
,find
,full
,nnz
,nonzeros
,nzmax
,sprandn
,
sprandsym
,spy
spalloc
spaugment
