いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)行列の生成と各種の演算

 Googleスプレッドシートで数値からなる行列を生成する方法と、各種の計算を行う方法についてです。

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

手順

行列を生成する

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

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

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

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

 B2セル

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

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

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

 MUNIT関数を使えば単位行列を生成することができます。

 B2セル

=MUNIT(2)

 引数により次数を指定することができます。3にすれば3行3列の単位行列になります。

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

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

 B2セル

=SEQUENCE(2,3,11,10)

 引数は4つ指定でき、順番に行数・列数・初項・増分です。
 増分を0にすればすべての要素が等しい行列を生成できます。

RANDARRAY関数で乱数からなる行列を生成する

 RANDARRAY関数により、乱数からなる行列を生成できます。

 B2セル

=RANDARRAY(3,2)

 指定できるのは行数と列数のみで、出力される乱数は0以上1以下(一様分布)です。

行列を参照する

 行列は1つの式で参照できます。

 E2セル

={B2:C3}

 基本的に参照範囲を波カッコで囲めばOKです。
 ちなみに「=ARRAYFORMULA(B2:C3)」や「=INDEX(B2:C3)」でも参照できます。このように関数の引数として参照する場合は波カッコは不要です。

行列を連結する

 複数の行列を連結することもできます。
 カンマ(,)で列方向(横)に、セミコロン(;)でつなげば行方向(縦)に連結することができます。
 ここでは2つの行列を参照するとともにカンマを使って横に連結しています。

 E2セル

={B2:C3,B5:C6}

 こうした式をそのまま関数の引数として利用することもできます。作業列が増えないのでとても便利です。

 

 ここではカンマとセミコロンを使って3つの行列を連結しています。

 E2セル

={B2:C3,B5:C6;B8:E8}

行列を使った演算

行列の和、差

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

 H2セル

=ARRAYFORMULA(B2:C3+E2)

 

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

 H2セル

=ARRAYFORMULA(B2:C3+E2:E3)

 

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

 H2セル

=ARRAYFORMULA(B2:C3+E2:F2)

 

 ここでは2行2列の2つの行列について、対応する各要素の足し算を行っています。
 本来の行列の和、差です。

 H2セル

=ARRAYFORMULA(B2:C3+E2:F3)

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

 ARRAYFORMULA関数と掛け算の演算子(*)を使うことで、行列のすべての要素に一定の数値をかけた結果を得ることができます。

 H2セル

=ARRAYFORMULA(B2:C3*E2)

 「*」の前後は逆でも同じ結果になります。

 

 行ごとに異なる数値をかけた結果を得ることもできます。

 H2セル

=ARRAYFORMULA(B2:C3*E2:E3)

 

 ここでは列ごとに異なる数値をかけた結果を得ています。

 H2セル

=ARRAYFORMULA(B2:C3*E2:F2)

 

 ここでは2行2列の2つの行列について、対応する各要素をかけた結果を得ています。
 行列積とは似て非なるものですので注意が必要です。

 H2セル

=ARRAYFORMULA(B2:C3*E2:F3)

MMULT関数で行列積を求める

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

 H2セル

=MMULT(B2:C3,E2:F3)

MINVERSE関数で逆行列を求める

 MINVERSE関数を使うことで逆行列を求めることができます。

 E2セル

=MINVERSE(B2:C3)

 

 正則でない行列(行列式の値が0)に対してはエラーが返ります。
 ちなみに行列式の値はMDETERM関数で求められます。


TRANSPOSE関数で行列を転置する

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

 E2セル

=TRANSPOSE(B2:C4)