How to | 行列の部分を更新する方法

Mathematica には,行列の構築,計算,可視化等の操作をサポートする数多くの行列操作が含まれている.また,Mathematica は行列の一部を選び,それに新しい値を割り当てるための豊富な言語も兼ね備えている.

以下の行列を定義する:

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

割当ての左側にPartの簡略表記)を使って要素を設定する:

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

以下は位置 (1,2) にある要素が更新されたことを示す:

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

行全体を設定するためには,行を指定するのに1つの指数を使い,それを新しい行に割り当てる:

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

列全体を設定するためには,Allですべての行を選び,列を指定する:

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

部分行列を設定するためには,Spanの簡略表記()を使うとよい:

まず0から10までのランダムな整数の5×5行列を設定する:

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

ここで色付けされている左上の3x4行列は行1から3および列1から4に対応する:

Out[49]=

Spanの簡略表記()を使って該当する行と列の範囲を指定し,色付けされた部分行列を更新する:

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

一番外側の行と列以外の要素をすべて(負の指数は最後から数える)を更新する:

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

大きな行列を更新する場合には,これをループを使って行うことは避けた方がよい.1つのコマンドを使ってすべての要素を更新するような更新技術の一つを使える場合には,通常その方がずっと速い.

In[36]:=
Click for copyable input

これは1つの行の要素をすべて更新する遅い方法である:

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

以下の方がずっと速い:

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

行列をループでアップデートすることを避けられない場合は,行列をさらに参照することを避ける必要がある.そうしないと,行列はコピーされてループはあまり速く実行されなくなる:

In[39]:=
Click for copyable input

以下で余分な参照を避けることができる.ループはかなり速く実行される:

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

以下では各ステップで行列のコピーが作成されるので,ループはあまり速く実行されない:

In[41]:=
Click for copyable input
Out[41]=
New to Mathematica? Find your learning path »
Have a question? Ask support »