第8章 ベクトル・行列の基礎

第8章 ベクトル・行列の基礎
Rによるベクトル・行列の表現と計算法
8.1 スカラーとベクトル
• スカラー
単一の値を持つもの
• ベクトル
複数の値を縦もしくは横に並べたもの
例:
x <- 10
y <- c(1,2,4)
# xの値はスカラー
# yの値はベクトル
8.2 ベクトル
(1) ベクトルをつくるための基本関数: c
例: veca <- c(1,2,3,4,5)
別の方法
: seq rep
例: veca2 <- 1:5
veca4 <- 10:1
veca6 <- seq(1,5,1)
vecc <- rep(1,8)
8.2 ベクトル(続き)
(2) ベクトルの基本演算
以下ではveca, vecbはベクトル
veca <- 1:5 ; vecb <- seq(2,10,2)
加算
例: veca + vecb # =c(3,6,9,12,15)
減算
例: veca – vecb # =c(-1,-2,-3,-4,-5)
8.2.1ベクトルの基本演算(続き)
以下ではveca, vecbはベクトル
veca <- 1:5 ; vecb <- seq(2,10,2)
掛け算
例: veca * vecb # =c(2,8,18,32,50)
割算
例: veca / vecb # =c(0.5, 0.5, 0.5, 0.5, 0.5)
内積
例: veca %*% vecb # 110 = sum(veca*vecb)
8.2.1ベクトルの基本演算(続き)
以下ではveca, vecbはベクトル
veca <- 1:5 ; vecb <- seq(2,10,2)
スカラー倍
例: veca*5 # = c(5,10,15,20,25)
サイズが一致しないベクトル同士の足し算
例: veca+c(2,4) # = c(3,6,5,8,7)
警告はでるが1+2,2+4,3+2,4+4,5+2と計算
掛け算の場合も同様
8.2 ベクトル(続き)
(3) ベクトルの要素を取り出す
veca <- 11:20
一個の値の取り出し
veca[2] で2番目の要素 12 が取り出せる
複数の値の取り出し
例: veca[3:7] # = 13:17
例: veca[c(2,4,6,8)] # = c(12,14,16,18)
8.3 行列
行列 縦横にデータの値が並べられたもの
例:n人の人がそれぞれp個の変数の値を持つ
⇒ n x pの行列
行列を作るための関数 matrix, cbind, rbindなど
例: matrix(1:12,nrow=3,ncol=4)
matrix(1:12,3,4)
1
4
7
10
matrix(1:12,nrow=3)
2
5
8
11
matrix(1:12,ncol=4)
3
6
9
12
列方向優先の割り当て
8.3 行列(続き)
行方向優先の割り当て方法
matrix(1:12,nrow=3,ncol=4,byrow=TRUE)
1
2
3
4
5
6
7
8
9
10
11
12
8.3 行列(続き)
以下ではveca, vecbはベクトル
veca <- 1:5 ; vecb <- seq(2,10,2)
複数のベクトルを並べて行列を作る
1
* 列ベクトルを横に追加
2
cbind(veca,vecb)
3
4
* 行ベクトルを縦に追加
5
rbind(veca,vecb)
1
2
3
4
5
2
4
6
8
10
2
4
6
8
10
8.3 行列(続き)
行列の行や列に名前をつける
行に名前をつける: rownames
列に名前をつける: colnames
例: mata <- matrix(1:6,nrow=2,ncol=3)
rownames(mata) <- c(“row1”,”row2”)
colnames(mata) <- c(“col1”,”col2”,”col3”)
col1
col2
col3
row1
1
3
5
row2
2
4
6
8.3 行列(続き)
行列の四則演算
例: mata <- matrix(1:6,nrow=2,ncol=3)
matb <- matrix(3:8,nrow=2,ncol=3)
1
3
5
足し算: mata + matb
2
4
6
引き算: mata – matb
3
5
7
掛け算: mata * matb
4
6
8
割り算: mata / matb
mata
mata
- matb
+ matb
= =
4-2
8-2
12
-2
6-2
10
-2
14
-2
8.3 行列(続き)
1
mata =
2
転置の関数: t
3
例: t(matb)
matb =
4
行列の積
t(matb)=
例: t(matb) %*% mata
mata %*% t(matb)
t(matb) %*% mata =
5
4
6
5
7
6
8
25
39
17
39
61
23
53
83
3*1+4*2=
11
3
3
4
5
6
7
8
8.3 行列(続き)
1
4
特別な行列
2
5
(1) 正方行列
3
6
行の数と列の数が等しい
対角要素
(2) 対角行列
1
0
非対角要素がすべて0
0
2
diag(c(1,2,3))
0
0
(3) 単位行列
対角要素がすべて1の対角行列
1
0
diag(3)
7
8
9
0
0
3
0
0
1
0
0
0
1
8.3 行列(続き)
行列の要素を取り出す
matd[2,]
matd =
1
6
11
16
21
2
7
12
17
22
3
8
13
18
23
4
9
14
19
24
5
10
15
20
25
matd[,2]
matd[2,4]
8.3 行列(続き)
行列の演算
(1) 行列式 det
(2) 逆行列 solve
ただし、逆行列が存在する場合に限る
そうでないとエラーになる
固有値と固有ベクトル
eigen
得られるのはlist型のオブジェクト($valuesと$vectors
でそれぞれ固有値と固有ベクトルを得られる)