22.1.3 疎行列に関する情報の検索
スパース行列に関する情報を取得できる関数は多数あります。最も基本的な関数は、 特定の Octave オブジェクトが実際にスパース行列であるかどうかを識別する issparseです。
もう 1 つの非常に基本的な関数はnnzです。これは、疎行列にある非ゼロのエントリの数を返します。一方、関数 nzmax は、疎行列に割り当てられたストレージの量を返します。Octave は、疎オブジェクトの場合、最初の機会に未使用のメモリを切り取る傾向があることに注意してください。ユーザーが作成した疎オブジェクトの場合、nzmaxによって返される値がnnzと同じにならない場合がありますが、一般的には同じ結果が得られます。関数spstats は、疎行列の列に関するいくつかの基本的な統計情報 (要素の数、各列の平均と分散など) を返します。
: tf = issparse (x)
xがスパース行列の 場合は true を返します。
See also: ismatrix.
: n = nnz (A)
A内のゼロ以外の要素の数を返します。
See also: nzmax, nonzeros, find.
: v = nonzeros (A)
行列Aの非ゼロ値の列ベクトルを返します。
See also: find, nnz.
: n = nzmax (SM)
疎行列SMに割り当てられたストレージの量を返します。
プログラミング上の注意: Octave は、スパース オブジェクトの場合、最初の機会に未使用のメモリを切り取る傾向があります。したがって、一般に の値は、ユーザーが作成したスパース オブジェクトの一部の場合を除き、nzmaxと同じになりますnnz。
また、Octave は常に少なくとも 1 つの値のためのストレージを予約することに注意してください。したがって、空の行列の場合はnnz0 が報告されますが、nzmaxは 1 が報告されます。
See also: nnz, spalloc, sparse.
: [count, mean, var] = spstats (S)
: [count, mean, var] = spstats (S, j)
疎行列Sの非ゼロ要素の統計を返します。
countは各列の非ゼロの数、meanは各列の非ゼロの平均、var は各列の非ゼロの分散です。
2 つの入力引数で呼び出され、Sがデータで、j がデータのビン番号である場合、各ビンの統計を計算します。この場合、ビンにはゼロのデータ値を含めることができますが、 ゼロが消えることもあります。 spstats (S)
疎行列を含む線形方程式を解く場合、Octave は行列の型に基づいて方程式を解く方法を決定します (疎行列の線形代数を参照)。Octave は、div (/) または ldiv (\) 演算子が最初に行列で使用されるときに行列の型を調べ、その型をキャッシュします。ただし、 div または ldiv 演算子を使用する前に、 matrix_type 関数を使用して疎行列の型を判別できます。たとえば、
a = tril (sprandn (1024, 1024, 0.02), -1) ... + speye (1024); matrix_type (a); ans = Lower
これは、Octave が下三角行列の行列型を正しく決定していることを示しています。matrix_type は、行列の型を特定の型に強制するためにも使用できます。例:
a = matrix_type (tril (sprandn (1024, ... 1024, 0.02), -1) + speye (1024), "Lower");
これにより、行列の種類を決定するコストを回避できます。ただし、行列の種類を誤って定義すると、線形方程式の解から誤った結果がもたらされるため、行列の種類を正しく識別することは完全にユーザーの責任となります。
疎行列に関する情報を見つけるためのグラフィカルな手段はいくつかあります。最初の手段はspyコマンドで、行列の非ゼロ要素の構造を表示します。spyの使用例については、 図 22.1 を参照してください。より高度なグラフィカル情報は、 treeplot、etreeplot 、およびgplotコマンドで取得できます 。
疎行列の用途の 1 つはグラフ理論です。グラフ理論では、ノード間の相互接続が隣接行列として表されます。つまり、グラフ内の i 番目のノードが j 番目のノードに接続されている場合、疎隣接行列の ij 番目のノード (無向グラフの場合は ji 番目のノード) はゼロ以外になります。各ノードが座標セットに関連付けられている場合は、gplot コマンドを使用してノード間の相互接続をグラフィカルに表示できます。
gplotの使用例として、次の例を考えてみましょう。
A = sparse ([2,6,1,3,2,4,3,5,4,6,1,5], [1,1,2,2,3,3,4,4,5,5,6,6],1,6,6); xy = [0,4,8,6,4,2;5,0,5,7,5,7]'; gplot (A,xy)
これにより、ノード1がノード2および6に接続され、ノード2がノード1および3に接続されるなど、隣接行列が作成されます。Aノードの座標はn行2列の行列で与えられます。図22.2xyを参照してください。
コレスキー分解のノード間の依存関係は、 コマンドでコレスキー分解を明示的に計算する必要なく、線形時間で計算できます。 このコマンドは、行列の消去木を返します。が対称かどうかはetree、 コマンドでグラフィカルに表示できます。 treeplot (etree (A))Atreeplot (etree (A+A'))
: spy (x)
: spy (…, markersize)
: spy (…, line_spec)
スパース行列xのスパースパターンをプロットします。
オプションの数値引数markersize が指定されている場合は、プロットで使用されるマーカーのサイズが決まります。
オプションの文字列line_specが指定されている場合は、それが渡されplot 、プロットの外観を決定します。
See also: plot, gplot.
: p = etree (S)
: p = etree (S, typ)
: [p, q] = etree (S, typ)
行列Sの消去木を返します
デフォルトでは、 Sは対称であると想定され、対称除去ツリーが返されます。引数typ は、対称除去ツリーまたは列除去ツリーのどちらが返されるかを制御します。typ の有効な値は、それぞれ 対称ツリーまたは列除去ツリーの場合は"sym"または です"col"。
2 番目の引数で呼び出されると、etreeツリー上の後順の順列も返されます。
: etreeplot (A)
: etreeplot (A, node_style, edge_style)
A+A'行列Aの消去木をプロットします。Aが対称でない 場合はプロットします。
オプションのパラメータnode_styleとedge_style は出力スタイルを定義します。
See also: treeplot, gplot.
: gplot (A, xy)
: gplot (A, xy, line_style)
: [x, y] = gplot (A, xy)
グラフ理論の意味で Aとxyによって定義されたグラフをプロットします。
A はプロットされる配列の隣接行列であり、xy はグラフのノードの座標を含む n行 2 列の行列です。
オプションのパラメータline_style は、プロットの出力スタイルを定義します。出力引数なしで呼び出されると、グラフが直接プロットされます。それ以外の場合は、プロットの座標をxとyで返します。
See also: treeplot, etreeplot, spy.
: treeplot (tree)
: treeplot (tree, node_style, edge_style)
ツリーまたはフォレストのグラフを作成します。
最初の引数は先行するベクトルです。
オプションのパラメータnode_styleとedge_style は出力プロット スタイルを定義します。
アルゴリズムの複雑さは、時間とメモリ要件の観点から O(n) です。
See also: etreeplot, gplot.
: [x, y] = treelayout (tree)
: [x, y] = treelayout (tree, permutation)
: [x, y, h, s] = treelayout (…)
treelayout はツリーまたはフォレストをレイアウトします。
最初の引数tree は先行する要素のベクトルです。
オプションのパラメータ順列は、後順順列です。
アルゴリズムの複雑さは、時間とメモリ要件の観点から O(n) です。
See also: etreeplot, gplot, treeplot.

