いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

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

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

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

手順

行列を生成する

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

f:id:accs2014:20201022000029p:plain:right:w400

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

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

f:id:accs2014:20201022000034p:plain:right:w400

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

 B2セル

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

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

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

f:id:accs2014:20201022000039p:plain:right:w400

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

 B2セル

=MUNIT(2)

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

SEQUENCE関数で行列を生成する

f:id:accs2014:20201022000043p:plain:right:w400

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

 B2セル

=SEQUENCE(2,2,1)

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

行列を参照する

f:id:accs2014:20201022000047p:plain:right:w400

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

 E2セル

={B2:C3}

 基本的に参照範囲を波カッコで囲めばOKです。
 ちなみに「=ARRAYFORMULA(B2:C3)」でも参照できます。

 

f:id:accs2014:20201022000051p:plain:right:w450

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

 E2セル

={B2:C3,B5:C6}

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

 

f:id:accs2014:20201022000056p:plain:right:w450

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

 E2セル

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

行列を使った演算

行列の和、差

f:id:accs2014:20201022000100p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3+E2)

 

f:id:accs2014:20201022000105p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3+E2:E3)

 

f:id:accs2014:20201022000109p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3+E2:F2)

 

f:id:accs2014:20201022013315p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3+E2:F3)

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

f:id:accs2014:20201022000117p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3*E2)

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

 

f:id:accs2014:20201022000121p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3*E2:E3)

 

f:id:accs2014:20201022000126p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3*E2:F2)

 

f:id:accs2014:20201022000131p:plain:right:w500

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

 H2セル

=ARRAYFORMULA(B2:C3*E2:F3)

MMULT関数で行列積を求める

f:id:accs2014:20201022000135p:plain:right:w500

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

 H2セル

=MMULT(B2:C3,E2:F3)

MINVERSE関数で逆行列を求める

f:id:accs2014:20201022000140p:plain:right:w400

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

 E2セル

=MINVERSE(B2:C3)

 

f:id:accs2014:20201022000146p:plain:right:w400

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

TRANSPOSE関数で行列を転置する

f:id:accs2014:20201022000152p:plain:right:w400

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

 E2セル

=TRANSPOSE(B2:C4)