いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)各種の行列の生成と演算

 Excelにおいて、各種の行列(特に数値が格納されているもの)の生成と計算を行う方法についてです。

  • 各要素となる数値をセルに直接入力するほか、1つの式で行列を生成することもできます。
  • MUNIT関数で単位行列を生成できるほか、SEQUENCE関数、RANDARRAY関数、MAKEARRAY関数を利用して行列を生成できます。
  • 「+」「-」「*」の演算子を使って行列の和、差、スカラー倍の計算ができます。
  • MMULT関数で行列積を、MINVERSE関数で逆行列を計算でき、TRANSPOSE関数で行列を転置できます。

手順

行列を生成する

各セルに各要素の値を直接入力する

 表計算ソフトならではの、もっとも簡単に行列を生成する方法です。
 各セルに数値を入力していけば、それが行列になります。

1つの式で行列を生成する

 1つの式だけで各要素を記述して任意の行列を生成することもできます。

 B2セル

={1,2;3,4;5,6}

 カンマ(,)で列を追加し、セミコロン(;)で行を追加していくことができます。
 そして全体を波カッコで囲むことにより、行列として値が各セルに展開されます。


 ARRAYTOTEXT関数を使えば、逆に入力済の行列から上記のような式を取得することができます。

 E2セル

=ARRAYTOTEXT(B2:C4,1)

MUNIT関数で単位行列を生成する

 MUNIT関数により単位行列を生成することができます。

 B2セル

=MUNIT(3)

 引数は次数です。4にすれば4行4列の単位行列となります。

SEQUENCE関数で等差数列からなる行列を生成する

 SEQUENCE関数は連番を生成する関数です。
 連番を複数行・複数列にわたって並べることができるので、一定の行列を生成することができます。

 B2セル

=SEQUENCE(3,4,15,10)

 引数は順に行数、列数、初項、増分です。
 増分を0にすればすべての要素が等しい行列となります。

RANDARRAY関数で乱数の行列を生成する

 RANDARRAY関数を使えば乱数からなる行列を生成できます。

 B2セル

=RANDARRAY(4,3)

 引数で行数と列数を指定しています。
 このとき乱数の分布は0以上1以下の一様分布となります。


 この例では最小値と最大値を指定し、さらに整数のみの出力を行っています。

 B2セル

=RANDARRAY(3,4,91,100,TRUE)

 第3引数以降が最小値、最大値、整数指定(TRUEで整数のみ、FALSEで小数あり)となっています。

MAKEARRAY関数で各要素の値が行番号、列番号の関数となる行列を生成する

 LAMBDA関数とそのヘルパー関数であるMAKEARRAY関数を使う例です。
 式はやや複雑になりますが複雑な行列も容易に出力できます。

 B2セル

=MAKEARRAY(5,5,LAMBDA(r,c,r+c))

 MAKEARRAY関数の第1引数、第2引数はそれぞれ行数と列数です。
 LAMBDA関数内で行列内の行番号と列番号にそれぞれr,cと名付け、各要素の値をr+cとして出力しています。
 これによりr行c列の要素の値はr+cとなります。


 式に関数を組み込めるのが強力なポイントです。

 B2セル

=MAKEARRAY(5,5,LAMBDA(r,c,MIN(r,c)))

 LAMBDA関数の第3引数を「MIN(r,c)」とすることにより、r行c列の要素の値は「rとcの値の小さい方」となります。

行列を参照する

 セルの参照と同様に範囲を指定すれば範囲全体を参照(転記)することができます。

 B2セル

=B2:C3

行列を使った演算

行列の和と差

 行列と1つの値を+演算子でつなぐことにより、行列のすべての要素に同じ値を足した結果を得ることができます。
 また、引き算の演算子(-)を使えば行列のすべての要素から一定の数値を引いた結果になります。
 本来の行列の和、差ではありませんが、行数・列数が同じ行列を用意しなくともこのような計算ができます。

 G2セル

=B2:C3+E2


 行ごとに異なる数値を加えた(差し引いた)結果を得ることもできます。

 G2セル

=B2:C3+E2:E3


 列ごとに異なる数値を加えた(差し引いた)結果を得ることもできます。

 H2セル

=B2:C3+E2:F2


 2行2列の2つの行列について、対応する各要素を加算しています。
 本来の意味での行列の和、差です。

 H2セル

=B2:C3+E2:F3

行列の各要素に一定の値をかける(スカラー倍)

 行列と1つの数値を*演算子でつなぐことにより、行列のすべての要素に一定の数値をかけた結果を得ることができます。
 同様に/演算子を使えば割り算も可能です。

 G2セル

=B2:C3*E2


 行ごとに異なる数値をかけている例です。

 G2セル

=B2:C3*E2:E3


 列ごとに異なる数値をかけている例です。

 H2セル

=B2:C3*E2:F2


 2行2列の2つの行列について、対応する各要素をかけた結果を得る例です。
 下記の行列積とは異なるものです。

 H2セル

=B2:C3*E2:F3

MMULT関数で行列積を求める

 MMULT関数を使うことで行列積を求めることができます。 
 これはもちろん行列のスカラー倍とは基本的に異なります。一般に行列の順番を入れ替えると異なる結果になりますし、列数と行数が正しく対応していないとエラーが返ります。

 H2セル

=MMULT(B2:C3,E2:F3)

MINVERSE関数で逆行列を求める

 MINVERSE関数により、行列の逆行列を求めることができます。

 E2セル

=MINVERSE(B2:C3)


 正則でない行列(行列式の値が0)に対してはエラーを返します。

MDETERM関数で行列式の値を求める

 これ自体は行列を出力するものではありませんが、MDETERM関数により行列の行列式の値を求めることができます。

 E2セル

=MDETERM(B2:C3)

TRANSPOSE関数で行列を転置する

 TRANSPOSE関数を使うことで、行列を転置することができます。

 E2セル

=TRANSPOSE(B2:C4)