How to | 行列を作成する方法

Mathematica において行列はリストで表される.行列は,{ } 表記を使って直接入力,公式から構築,データファイルからインポートのいずれかの方法を使って入力することができる.Mathematica には対角行列,定数行列等特別の型を持つ行列を作成するコマンドも含まれている.

行列は,表記を使って直接入力することができる:

In[40]:=
Click for copyable input
Out[40]=

MatrixFormを使って行列表記で結果を表示することができる:

In[41]:=
Click for copyable input
Out[41]//MatrixForm=

は,を入力するもうひとつの方法である.が形式に関する関数である場合に使用すると便利なことがある.

以下ではTableを使って および の値の格子を作成する:

In[42]:=
Click for copyable input
In[44]:=
Click for copyable input
Out[44]//MatrixForm=

Mathematica における行列は,数字の行列に限られているわけではない.公式のように記号的な項目を行列に含めることも可能である:

In[45]:=
Click for copyable input
Out[46]//MatrixForm=
    

行列を作成してそれを割当てと一緒に保存する場合に,これをMatrixFormを使ってフォーマットすることと組み合せて使わないようにすることが大切である.カッコを使う:

In[47]:=
Click for copyable input
Out[47]//MatrixForm=

を使ってさらに計算することができる:

In[48]:=
Click for copyable input
Out[48]//MatrixForm=

カッコを使わなかったとする:

In[49]:=
Click for copyable input
Out[49]//MatrixForm=

は行列のように表示されるが,計算上では行列のようには作動しない.例えば,以下の計算では行列の掛け算を行わない:

In[50]:=
Click for copyable input
Out[50]=

の値は,FullFormを使って検証することができる:

In[51]:=
Click for copyable input
Out[51]//FullForm=

はフォーマットを行うラッパーMatrixFormも含んでおり,これがを行列として作動させないようにしていることが上から分かる.

    

さまざまな特別型の行列を作成する関数がある.

以下では,からまでの間にある実数値の4×5 行列を作成する:

In[136]:=
Click for copyable input
Out[136]//MatrixForm=

これは対角線上のみに非零の項目がある行列を作成する:

In[53]:=
Click for copyable input
Out[53]//MatrixForm=

以下は項目がすべて同じである行列を作成する:

In[54]:=
Click for copyable input
Out[54]//MatrixForm=

4×4のヒルベルト行列を作成する.各項目はの形式を持っている:

In[55]:=
Click for copyable input
Out[55]//MatrixForm=
    

数多くの線形代数とその他の関数が行列を返す.

ここでは,ランダムな3×3行列のQR分解が計算される:

In[140]:=
Click for copyable input

Q行列を表示する:

In[142]:=
Click for copyable input
Out[142]//MatrixForm=

Mathematica 関数が行列を返す場合に,パックアレイと呼ばれる最適化ストレージフォーマットが使われることが多い.

    

Mathematica ではリストに対して数多くのよく使われる操作を適用し,各要素に関数がマップされた別のリストを得ることができる.行列はリストのリストであるので,行列についても同様の操作を行うことができる.

以下は平方の2×2行列である:

In[59]:=
Click for copyable input
Out[60]//MatrixForm=

Sqrtを行列の各要素に適用する:

In[61]:=
Click for copyable input
Out[61]//MatrixForm=

このSqrtの動作はリスト作成機能と呼ばれ,非常に読みやすく効率的なコードを作成する.

リストを作成できない関数が使用される場合には,この関数は各要素にマップされない:

In[62]:=
Click for copyable input
Out[62]=

この関数をリストが作成できるものに変えると,各要素がマップされるようになる:

In[63]:=
Click for copyable input
Out[64]//MatrixForm=
    

行列を作成するためのもうひとつの方法としてデータファイルをインポートするという方法がある.これは,Table (.dat)CSV (.csv)TSV (.tsv)等の表形式を使って行える.行列はExcelのスプレッドシート(.xls)から読むこともできる.

以下はImportStringを使ってCSV形式の文字列を行列にインポートした例である.ファイルからのインポートはImportを使って行われる:

In[65]:=
Click for copyable input
Out[65]=

Mathematica は,科学的あるいは医学的なデータ形式である HarwellBoeingMATHDFNASACDFFITS等,その他の数多くの形式もサポートしている.

    

行列を作成する方法がプログラムの効率性に大きな影響を与えることもある.最大の効率を得るためには,行列に付け加えたり不必要な作成操作を行ったりすることを避け,可能な場合にはリストに記載できる操作を使用するべきである.

以下の例では,行列に絶えず新しい行が付け加えられる:

In[66]:=
Click for copyable input
Out[67]=

1度の計算で行列を作成する方がずっと速い.Forループを使用する状況になった場合には常にTableのようなその他の構築を使ってこれを置き換える方法がないかをチェックしてみた方がよい:

In[68]:=
Click for copyable input
Out[68]=

以下の例では,ゼロの 行列を作成し,これをループで充填する.ここで行うゼロの行列の作成はまったく不必要な操作である:

In[69]:=
Click for copyable input
Out[69]=

行列の各行に対して前駆体を1度作成し,それをリストに記載可能な操作と一緒に使用する方がずっと速い:

In[70]:=
Click for copyable input
Out[70]=

行列が大きく,多くの要素が同じ(例えば,ゼロ)である場合,SparseArrayで生成される疎行列を使って作業することを考慮すべきである.

New to Mathematica? Find your learning path »
Have a question? Ask support »