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

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

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

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

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

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

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

    

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

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

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

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

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

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

    

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

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

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

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

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

    

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

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

Q行列を表示する:

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

    

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

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

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

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

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

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

    

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

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

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

    

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

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

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

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

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

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