疎な(スパース)配列:線形代数

多くの大規模な線形代数アプリケーションは多くの要素を持つ行列を含んでいるが,非零要素のものは比較的少ない.WolframシステムではSparseArrayオブジェクトを使って「リストの操作:疎な(スパース)配列」で説明してあるようにこれを効果的に表現することができる.SparseArrayオブジェクトは非零の値がどこに表れるのかを指定する規則のリストを使って作用する.

SparseArray[list]通常のリストのSparseArrayバージョン
SparseArray[{{i1,j1}->v1,{i2,j2}->v2,},{m,n}]
要素が値 を持つ m×n の疎な配列
SparseArray[{{i1,j1},{i2,j2},}->{v1,v2,},{m,n}]
同じ疎な配列
Normal[array]SparseArrayに対応する通常のリスト

疎な配列の指定

「リストの操作:疎な(スパース)配列」で説明してあるように,パターンを使って疎な配列中の要素集団を指定することができる.また任意の階数のテンソルに対応する疎な配列を作ることもできる.

これで148個の非零要素がある50×50の疎な数値行列を作る.
In[1]:=
Click for copyable input
Out[1]=
これで行列要素を視覚的に表す.
In[2]:=
Click for copyable input
Out[2]=
これは行列中の大きい方から4番目までの固有値である.
In[3]:=
Click for copyable input
Out[3]=
DotSparseArrayの結果を与える.
In[4]:=
Click for copyable input
Out[4]=
通常の配列と同じように部分を抽出することができる.
In[5]:=
Click for copyable input
Out[5]=

通常のリストに対するのと同じようにSparseArrayに対してもほとんどの標準的な構造操作を行うことができる.結果が疎である場合はSparseArrayオブジェクトが返されるのが通例である.

Dimensions[m]配列の次元
ArrayRules[m]配列中の非零要素の規則
m[[i,j]]要素 i, j
m[[i]]i 番目の行
m[[All,j]]j 番目の列
m[[i,j]]=v要素 i, j の再設定

SparseArrayオブジェクトに直接行える構造操作の例

これはの第1列を与える.ここには非零要素は2つしかない.
In[6]:=
Click for copyable input
Out[6]=
の第1列中の各要素に3を足す.
In[7]:=
Click for copyable input
Out[7]=
これで第1列の全要素が非零になった.
In[8]:=
Click for copyable input
Out[8]=
これは第2行の非零要素の規則を与える.
In[9]:=
Click for copyable input
Out[9]=
SparseArray[rules]規則から疎な配列を生成
CoefficientArrays[{eqns1,eqns2,},{x1,x2,}]
方程式から係数の配列を得る
Import["file.mtx"]ファイルから疎な配列をインポートする

疎な配列を得る典型的な方法

これは三重対角ランダム行列を生成する.
In[10]:=
Click for copyable input
Out[10]=
行列を10乗してもまだかなり疎である.
In[11]:=
Click for copyable input
Out[11]=
係数を疎な配列として抽出する.
In[12]:=
Click for copyable input
Out[12]=
これは対応する通常の配列である.
In[13]:=
Click for copyable input
Out[13]=
これでもとの形式を再生する.
In[14]:=
Click for copyable input
Out[14]=
CoefficientArraysは通常の整方程式を扱うことができる.
In[15]:=
Click for copyable input
Out[15]=
二次式部分の係数は階数3のテンソルで与えられる.
In[16]:=
Click for copyable input
Out[16]=
これでもとの形を再生する.
In[17]:=
Click for copyable input
Out[17]=

機械精度の疎な数値行列について,WolframシステムはMatrix Market形式(.mtx)やHarwellBoeing形式のような標準的なファイル形式をサポートする.これらの形式の行列はImportExportを用いてインポートしたりエキスポートしたりできる.