トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

行列

*disclaimer
64666

R

行列


 行列の基本

  • 同じ型のデータの2次元配置
  • matrix関数で作成
  • 行の数は、nrow=行数 で指定
  • 列の数は、ncol=列数 で指定
  • 最初は、すべての要素の値を0にして作成しておくと楽。
> test.mx <- matrix(0, nrow=5, ncol=7)
> test.mx
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    0    0    0    0    0    0    0
[2,]    0    0    0    0    0    0    0
[3,]    0    0    0    0    0    0    0
[4,]    0    0    0    0    0    0    0
[5,]    0    0    0    0    0    0    0

> test.mx <- matrix(1:35, nrow=5, ncol=7)
> test.mx
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    6   11   16   21   26   31
[2,]    2    7   12   17   22   27   32
[3,]    3    8   13   18   23   28   33
[4,]    4    9   14   19   24   29   34
[5,]    5   10   15   20   25   30   35
  • データの数が合わないとエラーになる。

  • 先に作っておいたベクトルデータを入れることも可能。
> test
   koku     suu      ei sekaisi   rinri  buturi  kagaku 
     79      85      87      78      89      68      59 

> test.mx[1,] <- test
> test.mx
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]   79   85   87   78   89   68   59
[2,]    2    7   12   17   22   27   32
[3,]    3    8   13   18   23   28   33
[4,]    4    9   14   19   24   29   34
[5,]    5   10   15   20   25   30   35

  • カラムの見出しに名前を付ける
> colnames(test.mx) <- c("koku", "suu", "ei", "sekaisi", "rinri", "buturi", "kagaku")
> test.mx
     koku suu ei sekaisi rinri buturi kagaku
[1,]   79  85 87      78    89     68     59
[2,]    2   7 12      17    22     27     32
[3,]    3   8 13      18    23     28     33
[4,]    4   9 14      19    24     29     34
[5,]    5  10 15      20    25     30     35

  • 各行の見出しに名前を付ける
> rownames(test.mx) <- c("1mid", "1fin", "2mid", "2fin", "3fin")
> test.mx
     koku suu ei sekaisi rinri buturi kagaku
1mid   79  85 87      78    89     68     59
1fin    2   7 12      17    22     27     32
2mid    3   8 13      18    23     28     33
2fin    4   9 14      19    24     29     34
3fin    5  10 15      20    25     30     35

  • 行列で、名前を指定して、値を出す。
> test.mx["2fin", "rinri"]
[1] 24


 行列の作成 matrix()

matrix(データ, nrow=行数, ncol=列数)

> matrix(1:6, nrow=2, ncol=3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> matrix(1:6, nrow=3, ncol=2)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

 見出しをつける colnames(), rownames()

colnames(data) <- c("koku", "suu", "eigo")

 要素の指定 [行番号, 列番号]

> mx <- matrix(1:6, nrow=3, ncol=2)
> mx
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> mx[3, 1]
[1] 3
> mx[2, 2]
[1] 5

  • 行列のいずれかを省略すると、すべてを指定したことになる。
> mx
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> mx[1, ]
[1] 1 4
> mx[ , 2]
[1] 4 5 6

 行列の演算

> mx1 <- matrix(1:4, nrow=2, ncol=2)
> mx2 <- matrix(5:8, nrow=2, ncol=2)
> mx1
     [,1] [,2]
[1,]    1    3
[2,]    2    4

> mx2
     [,1] [,2]
[1,]    5    7
[2,]    6    8

> mx1 + mx2
     [,1] [,2]
[1,]    6   10
[2,]    8   12

> mx2 - mx1
     [,1] [,2]
[1,]    4    4
[2,]    4    4

> mx1 * mx2
     [,1] [,2]
[1,]    5   21
[2,]   12   32

> mx1 %*% mx2
     [,1] [,2]
[1,]   23   31
[2,]   34   46
  • 積に注意

 行列の計算

rowSums() 各行の総和
colSums() 各列の総和

rowMeans()
colMeans()

> rowSums(mx1)
[1] 4 6
> colSums(mx1)
[1] 3 7
> rowMeans(mx1)
[1] 2 3
> colMeans(mx1)
[1] 1.5 3.5

 行列の結合 rbind(), cbind()

> rbind(mx1, mx2)
     [,1] [,2]
[1,]    1    3
[2,]    2    4
[3,]    5    7
[4,]    6    8
> cbind(mx1, mx2)
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8