Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
sprand
ランダム疎行列
呼び出し手順
sp=sprand(nrows,ncols,density [,typ])
パラメータ
- nrows
 整数 (行数)
- ncols
 整数 (列数)
- density
 占有率 (密度)
- typ
 文字列,
"uniform"(デフォルト) または"normal"- sp
 疎行列
説明
sp=sprand(nrows,ncols,density) は,
	nrows 行ncols列,
	近似的にdensity*nrows*ncols個の非ゼロ
	エントリを有する疎行列spを返します.
densityパラメータは
	[0,1] の範囲で指定されます.
	そうでない場合,
	自動的にこの範囲に変換されます.
	このため, 0 より小さいか 1より大きい density を使用しても,
	エラーも警告も発生しません:
	式density=max(min(density,1),0)が使用されます.
typ="uniform"の場合, 一様分布の
	値 [0,1]が生成されます.
	typ="normal" の場合,正規分布の
	値が生成されます (平均=0 および標準偏差=1).
出力行列のエントリは指定された分布関数typに
	基づき計算されます.
	非ゼロ要素のインデックスはランダムに計算され,
	非ゼロの平均的な数はdensityとなります.
	実際のインデックスの値は,指数分布関数により計算されます.
	ただし,分布関数のパラメータは同時に計算されます.
副作用として,randおよび
      grandランダム数値生成器の状態はこの関数により修正されます.
	非ゼロエントリのインデックスは指数分布関数およびgrand関数から計算されます.
	行列の値はユーザーにより指定される分布関数(すなわち uniform または normal)
	およびrand関数から計算されます.
例
以下の例では,近似的に密度0.001の 100x1000疎行列を生成します. すなわち,およそ 100*1000*0.001=100個の非ゼロエントリとなります.
// 行列のエントリは一様分布となります. W=sprand(100,1000,0.001); // 行列のエントリは正規分布となります. W=sprand(100,1000,0.001,"normal");
以下のスクリプトは, 行列のエントリが指定した分布を有することを確認します. 非ゼロエントリを取得するためにspget関数を用います. 次に,エントリの最小値,最大値,平均を計算し, limit値と比較します.
typ = "normal"; // typ = "uniform"; nrows = 1000; ncols = 2000; density = 1/100; s=sprand(nrows,ncols,density,typ); nnzs=nnz(s); [ij,v]=spget(s); [%inf -%inf 0 %inf 1] // Limit values for "normal" [nnzs min(v) mean(v) max(v) variance(v)] [%inf 0 0.5 1 1/12] // Limit values for "uniform"
以下のスクリプトでは,ランダムに選択したエントリのインデックスを調べ,
	正しい分布を有することを確認します.
	一様分布のkmaxランダム疎行列を生成します.
	ここで,各行列について,生成する非ゼロのエントリのインデックスについて
	考えます.
	すなわち, 
	i=1,2,...,nrows
      	および j=1,2,...,ncolsrとなる
	各i および jについて
	イベント Aij = {エントリ (i,j) が非ゼロ}
	が発生するかどうかを調べます.
	行列C(i,j)はイベントAij
	が発生する回数を保存します.
	行列 R(k) は,k=1,2,...,kmax
	について試行回数kの実際の密度を保存します.
kmax = 1000; ncols=10; nrows=15; density=0.01; typ="uniform"; C=zeros(nrows,ncols); R=[]; for k=1:kmax M=sprand(nrows,ncols,density,typ); NZ=find(M<>0); NZratio = size(NZ,"*")/(nrows*ncols); R=[R NZratio]; C(NZ)=C(NZ)+1; end
このアルゴリズムが実行される場合(時々必要となる可能性があります), アルゴリズムが正しく実行されていることを確認するために 要素の統計値を計算することができます.
| << spones | Sparses Matrix | spzeros >> |