R (行列)

2019年2月19日 (火)

[R]対角行列を作成する

diag関数を使用する。

引数にスカラーを与えると、与えた数(整数)を行数とした対角成分が1、対角成分以外は0の行列を作成する。

引数にベクトルを与えると、ベクトルの値の順番に対角成分を持つ対角行列を作成する。

> diag(3)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
> diag(c(1, 2, 3))
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3

引数に既存の行列を与え、スカラー、ベクトルをそれぞれ代入することで、対角成分だけの値を置き換えることも可能である。

> mx <- matrix(c(1, 2, 3, 4), nrow = 2)
> mx
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> diag(mx) <- 9
> mx
     [,1] [,2]
[1,]    9    3
[2,]    2    9
> diag(mx) <- c(7, 8)
> mx
     [,1] [,2]
[1,]    7    3
[2,]    2    8

2019年2月16日 (土)

[R]転置行列を作成する

t関数を使う。

> v <- c(1, 2, 3, 4, 5, 6)
> mx <- matrix(v, nrow = 2, byrow = TRUE)
> mx
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> t(mx)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

2019年2月15日 (金)

[R]行列式の値の計算

det関数を使用する。

> v <- c(1, 2, 3, 4, 5, 6, 7, 8, 8)
> mx1 <- matrix(v, nrow = 3, byrow = TRUE)
> mx1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    8
> det(mx1)
[1] 3

行列式の定義より、正方行列でなければ行列式の値は計算できない。

> v <- c(1, 2, 3, 4, 5, 6)
> mx2 <- matrix(v, nrow = 2, byrow= TRUE)
> mx2
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> det(mx2)
determinant.matrix(x, logarithm = TRUE, ...) でエラー:
   'x' は正方行列でなければなりません

2019年2月13日 (水)

[R]行列を作成する

matrix関数を使用して数値ベクトルから行列を作成する。

> v <- c(1, 2, 3, 4, 5, 6)
> mx1 <- matrix(v, nrow = 2, byrow = TRUE)
> mx1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> mx2 <- matrix(v, nrow = 3, byrow = TRUE)
> mx2
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

作成する行列の行数をnrowオプションに与える。列数で与えるncolオプションもある。ベクトルの個数、nrow、ncolに矛盾が生じた場合は、ベクトルは作成されずにエラーとなる。byrowオプションをTRUEにすることで、ベクトルの値が行列の成分に代入させる順番が、1行目、2行目、・・・、という順になる。これをFALSEもしくはオプションそのものをしてしないと、1桁目、2桁目、・・・、の順に代入することになる。

それが行列か否かの判定は、is.matrix関数で行うことができる。

> is.matrix(v)
[1] FALSE
> is.matrix(mx1)
[1] TRUE