2019年8月19日月曜日

行列 matrix() 変換


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

数列(1:9)があるとき[1,1][2,1][3,1][1,2][1,3].....[3,3]の順に要素が充填される。これを列数が1の行列に変換すると。

matrix(matrix(1:9, nrow=3, ncol=3),ncol=1,byrow=T)
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9

順序は保たれる。しかし、もとの数列が順序を保ってない場合、つまり、c(1,4,7,2,5,8,3,6,9)のときは、以下の行列ができる。

matrix(c(1,4,7,2,5,8,3,6,9), nrow=3, ncol=3,byrow=F) # byrow=F is default.
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

その場合、"byrow=T" を利用して要素の充填順序を変えてやらなくてはならない。

matrix(c(1,4,7,2,5,8,3,6,9), nrow=3, ncol=3,byrow=T)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

そこで再び列数が1の行列に再変換してやる。再変換のときにはbyrow=Tはいらない。

matrix(matrix(c(1,4,7,2,5,8,3,6,9), nrow=3, ncol=3,byrow=T),ncol=1)
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9

please refer to this post as well.

0 件のコメント: