そろそろ、「行列」というのがどういったものか、
ナントナクでも理解できているのではないだろうか?
そうでないと、少々、困ってしまう。まだ、難しい話はしていない。
すでに述べた話として、
行列は、複数のベクトルの集まりであり、
さてさて、まだ、難しい話はしていないが、覚えないと行けないことはまだある。
行列で解説されている教科書を読むには、
最低限、行列の「特殊な形式」を知っておかないといけない。
何せ、理工系の学生に書かれたものの多くは、
周知の事実として、良心的な解説はしてくれない。
逆に、完全に素人向けの解説は、説明が簡単すぎる。
基礎知識の無い文系人間がゼロから始めるには、
あまりにも敷居が高い。仕方ないことかもしれないが。
毎度、関係ない話から入ってしまう。我ながら困ったものである。
そうそう。今回は、行列の「特殊な形式」について書くのであった。
ここから先の話は、覚えるしか無い。しかし、多くは無い。
ここで覚えないといけないのは以下の3つ。
まず、この行列は、3✕3の行列なので、正方行列である。これは解る。
そして、もうひとつの特徴として、対角成分以外が全て「0」であって、
対角成分のみに値が入っている。そのような特徴がある。
とりあえず、この種の形式の行列が確認できたところで、
Rを使って簡単な演習を行う。
# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)
# 作ったベクトル「x」から、
# 変数名を「M」とする「対角行列」を作る。
(M <- diag(x))
そして、その実行結果。
> # 三つのスカラー「5」と「8」と「3」から、
> # 変数名を「x」とするベクトルを作る。
> x <- c(5, 8, 3)
>
> # 作ったベクトル「x」から、
> # 変数名を「M」とする「対角行列」を作る。
> (M <- diag(x))
[,1] [,2] [,3]
[1,] 5 0 0
[2,] 0 8 0
[3,] 0 0 3
ここでは、diag()関数 が登場する。ベクトルから「対角行列」を作るための関数。
ちなみに、括弧(「(」と「)」)で括っているが、
このようにすることで、出力結果をすぐに表示してくれる。
さて、この結果はどのようになっているか?
たしかに、上手くいった。これが「対角行列」と呼ばれるものである。
ナントナクでも理解できているのではないだろうか?
そうでないと、少々、困ってしまう。まだ、難しい話はしていない。
すでに述べた話として、
行列は、複数のベクトルの集まりであり、
一つのベクトルは、スカラーの集まりである。
別の言い方をするのであれば、
スカラーが、格子状に並んでいるのが行列とも言える。
まぁ、当たり前のことではあるが。
教科書では、これを「成分」と呼ぶ場合が多い。
ということで、これも覚えておいた方が良い。
実際に、ここからは「成分」という言葉を実際に使うことになる。
さてさて、まだ、難しい話はしていないが、覚えないと行けないことはまだある。
行列で解説されている教科書を読むには、
最低限、行列の「特殊な形式」を知っておかないといけない。
何せ、理工系の学生に書かれたものの多くは、
周知の事実として、良心的な解説はしてくれない。
逆に、完全に素人向けの解説は、説明が簡単すぎる。
基礎知識の無い文系人間がゼロから始めるには、
あまりにも敷居が高い。仕方ないことかもしれないが。
毎度、関係ない話から入ってしまう。我ながら困ったものである。
そうそう。今回は、行列の「特殊な形式」について書くのであった。
ここから先の話は、覚えるしか無い。しかし、多くは無い。
ここで覚えないといけないのは以下の3つ。
- 正方行列
- 対称行列
- 対角行列
他にも覚えないといけないものはあるが、
見た目の違いでは、上の三つの行列を知る必要がある。
さて、では三つの行列の種類について順番に見ていくことにしよう。
ここからは、「R」 というソフトを使って、話を進めることにする。
以下からダウンロードできる。もちろん、オープンソースで無償。
http://www.r-project.org/
コマンドライン操作なので拒否反応がでるかもしれない。
ここは、我慢。乗り越えれば、なんてことない。難しくはない。
とりあえず、今回の話で登場するコマンドを、コピー・アンド・ペースト。
さてさて、Rのインストールが完了していとして、
早速、Rを使って演習を始める。まずは、Rの基本操作の練習から。
Rが立ち上がったら、コマンドコンソールに以下をコピペ。
# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)
ここでは、c() というコマンド(命令)が登場している。
こういったコマンドのことを、一般的に「関数」と呼ぶ。
英語では「function」と呼ぶ。何かの機能を定義しているのである。
c()関数は、combination の略で、スカラーからベクトルを作るための関数。
この関数は、非常に良く使う。計算のみならず、関数のパラメータの指定や、
グラフを描く際の色の指定や、他にも色々な所で登場する。
先頭行にシャープ(「#」)が付いている行は、
関数では無い行を意味する。なぜ、書くのか?単なるメモである。
数千行に渡ってプログラムを書いていると、
書いている本人が色々と忘れる。他の人に教えるにも不便。
この話は、いずれ詳しく書く事にしよう。
さてさて、次は、Rで行列を作る方法。今度は、ベクトルから行列を作ってみる。
# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
# ベクトルx からMと名付けた行列を作る。
M <- matrix(x, nrow=4, ncol=4)
ここで登場するのはmatrix()関数。これもよく使う。
今度は、括弧内に、x、nrow、ncolの3つが入っている。これらをパラメータと呼ぶ。
ここでは、最低限の3つのパラメータを指定しているが、実際にはもっと存在している。
まず、xというのは、最初に作ったベクトル。16個のスカラーから成っている。
nrowというのは、行数を指定するパラメータ。ここでは4を指定している。
ncolというのは、列数を指定するパラメータ。ここでも4を指定している。
要するに、xに入っているベクトルの成分(スカラー)を使って、
4✕4の行列を作成しているのである。
ちなみに、ここで作られた行列は以下のようになっている。
さてさて、いよいよ、本題に入るとしよう。
まずは、「正方行列」について。「正方形」という言葉からも連想できるかと思うが、
要するに、「正方行列」とは、行数と列数が同じ行列のことを言う。
ある行列があって、その行列が n行 × p列 であったとする。
多次元データの場合では、対象数がn個で、属性数がp個である。
つまり、n = p となっているような行列のことである。
実は、先程、Rのコマンド操作の練習で作成した行列「M」も正方行列。
ちなみに、「R」では、行数と列数を以下の方法で取り出すことができるので、
一応、確かめてみる(数が少ないので見れば判るのであるが...)。
# 行列M の行数を取り出す。
nrow(M)
# 行列M の列数を取り出す。
ncol(M)
実行結果は以下の通り。
> # 行列M の行数を取り出す。
> nrow(M)
[1] 4
>
> # 行列M の列数を取り出す。
> ncol(M)
[1] 4
ここでは、nrow()関数とncol()関数が登場している。パラメータには行列を指定。
結果は、行数が4、列数が4、という結果が帰ってくる。
行数と列数が同じなので、この行列は「正方行列」と言える。
ところで、この正方行列を「じ〜」と眺めてみると、ある特殊な傾向が見えてくる。
一つ目の「縦ベクトル」と一つ目の「横ベクトル」はどのようになっているか?
そうそう、同じベクトルが入っている。これが「対称行列」と呼ばれるもの。
対称行列というのは、「対角成分」を挟んで、「上側の部分」と「下側の部分」が
同じになっているもの。したがって、行と列を入れ替えても同じになる。
これも重要。多次元データ解析では、毎度のように出てくる。
Rの基本操作の練習も兼ねて、同じ行列もう一度作成し、
縦ベクトルと横ベクトルを取り出す。
# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
# ベクトルx からMと名付けた行列を作る。
M <- matrix(x, nrow=4, ncol=4)
# 一つ目の「縦ベクトル(一列目)」を抽出する
M[,1]
# 一つ目の「横ベクトル(一行目)」を抽出する
M[1,]
実行結果は以下の通り。
> # xと名付けたベクトルに、サンプルデータを入れる。
> x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
>
> # ベクトルx からMと名付けた行列を作る。
> M <- matrix(x, nrow=4, ncol=4)
>
> # 一つ目の「縦ベクトル(一列目)」を抽出する
> M[, 1]
[1] 8 2 9 3
>
> # 一つ目の「横ベクトル(一行目)」を抽出する
> M[1, ]
[1] 8 2 9 3
行列が入った変数「M」の後ろに大括弧(「[」と「]」)が付いていて、
「カンマ(「,」)」で区切られている。これは、見れば解ること。
要するに、カンマの前で「行番号」を、後ろで「列番号」を指定するのである。
ふむ。確かに、対角成分を挟んで、上半分の成分と、下半分の成分が同じ。
一つ目の「縦ベクトル」(一列目)と、一つ目の「横ベクトル」(一行目)は、
いずれも、[8, 2, 9, 3] である。他の行と列も同じ。要するに反転させても同じ。
最後は、「対角行列」と呼ばれる行列。
ここからは、「R」 というソフトを使って、話を進めることにする。
以下からダウンロードできる。もちろん、オープンソースで無償。
http://www.r-project.org/
コマンドライン操作なので拒否反応がでるかもしれない。
ここは、我慢。乗り越えれば、なんてことない。難しくはない。
とりあえず、今回の話で登場するコマンドを、コピー・アンド・ペースト。
さてさて、Rのインストールが完了していとして、
早速、Rを使って演習を始める。まずは、Rの基本操作の練習から。
Rが立ち上がったら、コマンドコンソールに以下をコピペ。
# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)
ここでは、c() というコマンド(命令)が登場している。
こういったコマンドのことを、一般的に「関数」と呼ぶ。
英語では「function」と呼ぶ。何かの機能を定義しているのである。
c()関数は、combination の略で、スカラーからベクトルを作るための関数。
この関数は、非常に良く使う。計算のみならず、関数のパラメータの指定や、
グラフを描く際の色の指定や、他にも色々な所で登場する。
先頭行にシャープ(「#」)が付いている行は、
関数では無い行を意味する。なぜ、書くのか?単なるメモである。
数千行に渡ってプログラムを書いていると、
書いている本人が色々と忘れる。他の人に教えるにも不便。
この話は、いずれ詳しく書く事にしよう。
さてさて、次は、Rで行列を作る方法。今度は、ベクトルから行列を作ってみる。
# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
# ベクトルx からMと名付けた行列を作る。
M <- matrix(x, nrow=4, ncol=4)
ここで登場するのはmatrix()関数。これもよく使う。
今度は、括弧内に、x、nrow、ncolの3つが入っている。これらをパラメータと呼ぶ。
ここでは、最低限の3つのパラメータを指定しているが、実際にはもっと存在している。
まず、xというのは、最初に作ったベクトル。16個のスカラーから成っている。
nrowというのは、行数を指定するパラメータ。ここでは4を指定している。
ncolというのは、列数を指定するパラメータ。ここでも4を指定している。
要するに、xに入っているベクトルの成分(スカラー)を使って、
4✕4の行列を作成しているのである。
ちなみに、ここで作られた行列は以下のようになっている。
さてさて、いよいよ、本題に入るとしよう。
まずは、「正方行列」について。「正方形」という言葉からも連想できるかと思うが、
要するに、「正方行列」とは、行数と列数が同じ行列のことを言う。
ある行列があって、その行列が n行 × p列 であったとする。
多次元データの場合では、対象数がn個で、属性数がp個である。
つまり、n = p となっているような行列のことである。
実は、先程、Rのコマンド操作の練習で作成した行列「M」も正方行列。
ちなみに、「R」では、行数と列数を以下の方法で取り出すことができるので、
一応、確かめてみる(数が少ないので見れば判るのであるが...)。
# 行列M の行数を取り出す。
nrow(M)
# 行列M の列数を取り出す。
ncol(M)
実行結果は以下の通り。
> # 行列M の行数を取り出す。
> nrow(M)
[1] 4
>
> # 行列M の列数を取り出す。
> ncol(M)
[1] 4
ここでは、nrow()関数とncol()関数が登場している。パラメータには行列を指定。
結果は、行数が4、列数が4、という結果が帰ってくる。
行数と列数が同じなので、この行列は「正方行列」と言える。
ところで、この正方行列を「じ〜」と眺めてみると、ある特殊な傾向が見えてくる。
一つ目の「縦ベクトル」と一つ目の「横ベクトル」はどのようになっているか?
そうそう、同じベクトルが入っている。これが「対称行列」と呼ばれるもの。
対称行列というのは、「対角成分」を挟んで、「上側の部分」と「下側の部分」が
同じになっているもの。したがって、行と列を入れ替えても同じになる。
これも重要。多次元データ解析では、毎度のように出てくる。
Rの基本操作の練習も兼ねて、同じ行列もう一度作成し、
縦ベクトルと横ベクトルを取り出す。
# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
# ベクトルx からMと名付けた行列を作る。
M <- matrix(x, nrow=4, ncol=4)
# 一つ目の「縦ベクトル(一列目)」を抽出する
M[,1]
# 一つ目の「横ベクトル(一行目)」を抽出する
M[1,]
実行結果は以下の通り。
> # xと名付けたベクトルに、サンプルデータを入れる。
> x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
>
> # ベクトルx からMと名付けた行列を作る。
> M <- matrix(x, nrow=4, ncol=4)
>
> # 一つ目の「縦ベクトル(一列目)」を抽出する
> M[, 1]
[1] 8 2 9 3
>
> # 一つ目の「横ベクトル(一行目)」を抽出する
> M[1, ]
[1] 8 2 9 3
行列が入った変数「M」の後ろに大括弧(「[」と「]」)が付いていて、
「カンマ(「,」)」で区切られている。これは、見れば解ること。
要するに、カンマの前で「行番号」を、後ろで「列番号」を指定するのである。
ふむ。確かに、対角成分を挟んで、上半分の成分と、下半分の成分が同じ。
一つ目の「縦ベクトル」(一列目)と、一つ目の「横ベクトル」(一行目)は、
いずれも、[8, 2, 9, 3] である。他の行と列も同じ。要するに反転させても同じ。
最後は、「対角行列」と呼ばれる行列。
結論から言うと、以下のような行列が「対角行列」である。
どのような特徴があるか?この行列をよく見て、その特徴を考えてみる。
どのような特徴があるか?この行列をよく見て、その特徴を考えてみる。
まず、この行列は、3✕3の行列なので、正方行列である。これは解る。
そして、もうひとつの特徴として、対角成分以外が全て「0」であって、
対角成分のみに値が入っている。そのような特徴がある。
とりあえず、この種の形式の行列が確認できたところで、
Rを使って簡単な演習を行う。
# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)
# 作ったベクトル「x」から、
# 変数名を「M」とする「対角行列」を作る。
(M <- diag(x))
そして、その実行結果。
> # 三つのスカラー「5」と「8」と「3」から、
> # 変数名を「x」とするベクトルを作る。
> x <- c(5, 8, 3)
>
> # 作ったベクトル「x」から、
> # 変数名を「M」とする「対角行列」を作る。
> (M <- diag(x))
[,1] [,2] [,3]
[1,] 5 0 0
[2,] 0 8 0
[3,] 0 0 3
ここでは、diag()関数 が登場する。ベクトルから「対角行列」を作るための関数。
ちなみに、括弧(「(」と「)」)で括っているが、
このようにすることで、出力結果をすぐに表示してくれる。
さて、この結果はどのようになっているか?
たしかに、上手くいった。これが「対角行列」と呼ばれるものである。
まず、対象行列→対称行列だと思います。
返信削除そして、n×nの正方行列のうち、対角成分以外のすべての成分が0であるものを対角行列と呼ぶのではないかと思います(堀内龍太郎、浦部治一郎(2005)「線形代数学」p.9~)。
誤字の指摘ありがとうございます。説明の仕方については...う〜ん、Rのコマンドの説明順序とかもあって、迷ったんですよね。まぁ、最初にこの記事を書いたのはかなり前だし、とにかく、書きなおして見ました。
返信削除