ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

sparse

スパース分散行列またはスパース対話型分散行列を作成する

構文

SD = sparse(FD)
SC = sparse(m,n,codist)
SC = sparse(m,n,codist,'noCommunication')
SC = sparse(i,j,v,m,n,nzmax)
SC = sparse(i,j,v,m,n)
SC = sparse(i,j,v)

説明

SD = sparse(FD) は非スパース分散配列または非スパース対話型分散配列 FD を、それぞれスパース分散配列またはスパース対話型分散配列 SD に変換します。

SC = sparse(m,n,codist) は、対話型分散 codist で定義されたスキームに従って分散された、基になるクラスが double である mn 列のスパース対話型分散配列を作成します。対話型分散オブジェクトの作成についての詳細は、codistributor1d および codistributor2dbc のリファレンス ページを参照してください。この形式の構文は、spmd、pmode または通信ジョブの中で最も効果を発揮します。

SC = sparse(m,n,codist,'noCommunication') は上記の方法で mn 列のスパース対話型分散配列を作成しますが、配列作成に際してエラー チェックのためのグローバル通信は行いません。この形式の構文は、spmd、pmode または通信ジョブの中で最も効果を発揮します。

SC = sparse(i,j,v,m,n,nzmax) はベクトル i および j を使用してインデックスを指定し、v を使用して要素の値を指定して、スペースを nzmax 個の非ゼロ要素に割り当てた、SC(i(k),j(k)) = v(k) となるような mn 列のスパース行列を生成します。入力ベクトル ij または v のいずれかが対話型分散行列の場合、出力されるスパース行列 SC も対話型分散行列になります。ベクトル ij および v は同じ長さでなければなりません。v のゼロ要素は、ij の対応する値と共に無視されます。重複する ij の値をもつ v の任意の要素は加算されます。

この 6 つの引数呼び出しを簡略化するために、引数 v と、引数 i または j のいずれかに対してスカラーを渡すことができます。この場合、ijv はすべて同じ長さになるように拡張されます。

SC = sparse(i,j,v,m,n)nzmax = max([length(i) length(j)]) を使用します。

SC = sparse(i,j,v) は、m = max(i)n = max(j) を使用します。これらの最大値は v のゼロが削除される前に計算されるため、[i j v] のいずれか 1 行が [m n 0] になる場合があり、これによって行列のサイズは確実に mn の要件を満たします。

メモ

基になるクラスが logical であるスパース対話型分散配列を作成するには、まず基になるクラスが double である配列を作成し、関数 logical を使用してそれをキャストします。

spmd
    SC = logical(sparse(m,n,codistributor1d()));
end

ワーカーを 4 つ使用する場合

spmd(4)
    C = sparse(1000,1000,codistributor1d())
end

これは、1000 行 1000 列で double 型のスパース対話型分散配列 C を作成します。C は 2 番目の次元 (列) により分散され、各ワーカーには C の 1000 行 250 列のローカル ピースが格納されます。

spmd(4)
    codist = codistributor1d(2,1:numlabs)
    C = sparse(10,10,codist);
end

これは、列により分散される 10 行 10 列の double 型のスパース対話型分散配列 C を作成します。各ワーカーには、C の 10 行 labindex 列のローカル ピースが格納されます。

分散配列をスパース分散配列に変換します。

R = rand(1000,'distributed');
D = floor(2*R); % D also is distributed
SD = sparse(D); % SD is sparse distributed

インデックスのベクトルと要素値の分散配列からスパース対話型分散配列を作成します。

r = [ 1  1  4  4 8];
c = [ 1  4  1  4 8];
v = [10 20 30 40 0];
V = distributed(v);
spmd
    SC = sparse(r,c,V);
end

この例では、値配列 v の 5 番目の要素は 0 ですが、rc 内の対応する最大のインデックスにより、結果のサイズは 8 行 8 列の行列になります。行列 SC は、spmd ブロック内の視点では対話型分散配列、クライアント ワークスペースの視点では分散配列と見なされます。この行列の非スパース バージョンを表示するには、関数 full により、このスパース分散配列を非スパース分散配列に変換します。

S = full(SC)
    10     0     0    20     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
    30     0     0    40     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0

R2006b で導入