行列の作成および操作方法を教えてください.

Mathematica では,任意の次元のベクトル,行列,配列は一様にリストあるいはリストのリストとして表されます.このため,ユーザが多くの異なる表現を扱い,変換しなければならない他の技術計算ソフトウェアに共通の多くの問題を回避することができます.例えば,Mapleでは,arraymatrixvectortablesetrandmatrixなどが使われています.




簡単な行列の作成

Mathematica で任意の次元のベクトル,行列,配列を作成するためには,Tableコマンドを使うのが最も簡単です.

[Graphics:Images/index_gr_1.gif]
[Graphics:Images/index_gr_2.gif]

Mathematica のリストには,あらゆる種類のMathematica オブジェクトを入れることができます.また,これらのオブジェクトは同じ次元である必要はありません.例えば,以下のリストにはスカラー,ベクトル,配列,グラフィックスオブジェクト,2つの変数が含まれています.

[Graphics:Images/index_gr_3.gif]

[Graphics:Images/index_gr_4.gif]

4つ目の要素はグラフィックスオブジェクトなので,Showを使って描画することができます.

[Graphics:Images/index_gr_5.gif]

[Graphics:Images/index_gr_6.gif]

[Graphics:Images/index_gr_7.gif]

3つ目の要素は,二次元配列です.

[Graphics:Images/index_gr_8.gif]
9 7 2
9 8 2

トップに戻る



特殊な行列を作成する

Mathematica には,単位行列あるいは対角行列などの特殊な行列を素早く作成するためのコマンドが含まれています.

[Graphics:Images/index_gr_9.gif]
[Graphics:Images/index_gr_10.gif]
[Graphics:Images/index_gr_11.gif]
[Graphics:Images/index_gr_12.gif]

トップに戻る



Mathematica での配列表示方法の変更

Mathematica は基本的に,MatrixFormTableForm,標準的な「リストのリスト」表記の3種類の方法でリストを表します.

[Graphics:Images/index_gr_13.gif]
[Graphics:Images/index_gr_14.gif]
[Graphics:Images/index_gr_15.gif]
[Graphics:Images/index_gr_16.gif]
[Graphics:Images/index_gr_17.gif]
[Graphics:Images/index_gr_18.gif] [Graphics:Images/index_gr_19.gif] [Graphics:Images/index_gr_20.gif]
[Graphics:Images/index_gr_21.gif] [Graphics:Images/index_gr_22.gif] [Graphics:Images/index_gr_23.gif]
[Graphics:Images/index_gr_24.gif] [Graphics:Images/index_gr_25.gif] [Graphics:Images/index_gr_26.gif]
[Graphics:Images/index_gr_27.gif]
[Graphics:Images/index_gr_28.gif]

これらのフォーマットコマンドは,高次元配列にも使えます.

[Graphics:Images/index_gr_29.gif]
[Graphics:Images/index_gr_30.gif]

トップに戻る



リストについての情報

リストの属性を調べるために使えるコマンドは多数あります.その中のいくつかを以下に示します.Mathematica の関数とテンソルについての追加情報は,Mathematica ブックの3.7.11をご覧ください.

[Graphics:Images/index_gr_31.gif]
[Graphics:Images/index_gr_32.gif]
[Graphics:Images/index_gr_33.gif]
[Graphics:Images/index_gr_34.gif]
[Graphics:Images/index_gr_35.gif]
[Graphics:Images/index_gr_36.gif]
[Graphics:Images/index_gr_37.gif]
[Graphics:Images/index_gr_38.gif]
[Graphics:Images/index_gr_39.gif]

トップに戻る



位置による配列の要素の選択

配列の要素を選ぶ際の最も一般的なメカニズムはPartコマンド,あるいはそのショートカット表記のmatrix[[index]]です.Partおよび,TakeDropなどこれと類似のコマンドについての詳細は,Mathematica ブックの1.8.42.1.53.8.4をご覧ください.

以下のコマンドは,配列mat1の最初の行を選びます.

[Graphics:Images/index_gr_40.gif]
[Graphics:Images/index_gr_41.gif]
[Graphics:Images/index_gr_42.gif]
[Graphics:Images/index_gr_43.gif]

ここで,[[All,1]]は最初の1列を選びます.

[Graphics:Images/index_gr_44.gif]
[Graphics:Images/index_gr_45.gif]

サブ配列は,選択の判定条件として範囲を指定することで抽出することができます.

[Graphics:Images/index_gr_46.gif]
[Graphics:Images/index_gr_47.gif]

これより大きい行列では,Rangeコマンドで選択の設定が簡素化できます.

[Graphics:Images/index_gr_48.gif]
[Graphics:Images/index_gr_49.gif]

このコマンドは以下のものと同じです.

[Graphics:Images/index_gr_50.gif]
[Graphics:Images/index_gr_51.gif]

トップに戻る



判定条件による配列の要素の選択

[Graphics:Images/index_gr_52.gif]

リストの要素を判定条件によって選択する場合の標準的なコマンドはSelectです.選択の判定条件は,通常純関数で定義されます.ベクトルあるいは1次元リストでは,Selectを直接呼び出すことができます.

[Graphics:Images/index_gr_53.gif]
[Graphics:Images/index_gr_54.gif]
[Graphics:Images/index_gr_55.gif]
[Graphics:Images/index_gr_56.gif]

これより高次元の場合は,Selectを構造にマップしなければなりません.

[Graphics:Images/index_gr_57.gif]
[Graphics:Images/index_gr_58.gif]

Positionを使うと,判定条件に合った項目の指標が返されます.次に,Extractを使って指標の付いた要素を抽出します.Selectは純関数を使いますが,Positionはパターンを探すことにご注意ください.

[Graphics:Images/index_gr_59.gif]
[Graphics:Images/index_gr_60.gif]
[Graphics:Images/index_gr_61.gif]
[Graphics:Images/index_gr_62.gif]

カスタム化された選択条件には,条件演算子の/;を使うと簡単にPositionのパターンを作成することができます.

[Graphics:Images/matrix_gr_1.gif]
[Graphics:Images/matrix_gr_2.gif]

以下の行はvec3 の最大要素の位置を返します.

[Graphics:Images/matrix_gr_3.gif]
[Graphics:Images/matrix_gr_4.gif]

Extractを使うと値が求められます.

[Graphics:Images/matrix_gr_5.gif]
[Graphics:Images/matrix_gr_6.gif]

トップに戻る



リストの要素を変える

リストの要素に直接新しい値を割り当てることができます.この操作により,元の行列はその場で変更されるということにご注意ください.

[Graphics:Images/index_gr_63.gif]
[Graphics:Images/index_gr_64.gif]
[Graphics:Images/index_gr_65.gif]
[Graphics:Images/index_gr_66.gif]

Listの要素は同じ次元である必要はないので,サブリストすべてに値を割り当てることもできます.

[Graphics:Images/index_gr_67.gif]
[Graphics:Images/index_gr_68.gif]
[Graphics:Images/index_gr_69.gif]
[Graphics:Images/index_gr_70.gif]
[Graphics:Images/index_gr_71.gif]
[Graphics:Images/index_gr_72.gif]
[Graphics:Images/index_gr_73.gif]

トップに戻る



その他の参照項目

  • リストの操作

    Mathematica には,この他にもリストの操作,および分割のような構造操作のための関数が数多く含まれています.これらの関数についての情報はMathematica ブックの1.8をご覧ください.

  • LinearAlgebra`MatrixManipulation`

    LinearAlgebra`MatrixManipulation`パッケージには,ブロック行列の作成などの行列操作のための簡単なユーティリティ関数が数多く含まれています.

  • Statistics`DataManipulation`

    Statistics`DataManipulation`パッケージにも,一般的な行列操作に役立つ関数が含まれています.

  • 表データの読込みと書出し

  • 画像処理


トップに戻る