2017-11-19 7 views
1

2巡回行列の構築方法は?2巡回行列R

たとえば、次の行列Aは2巡回行列です。つまり、最初の列から期待されるすべての列は、最後の2つの要素を最初に置くことによって前の列から得られます。最初の列は行列の生成元であることに注意してください。

N=12 
k=6 
x=c(0,0,0,0,1,1,1,1,2,2,2,2) 
A=matrix(0,N,k) 
A[,1]=x 
for(j in 2:ncol(A)) 
{ 
A[,j]=c(A[11:12,j-1],A[1:10,j-1]) 
} 

> A 
     [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 2 2 1 1 0 
[2,] 0 2 2 1 1 0 
[3,] 0 0 2 2 1 1 
[4,] 0 0 2 2 1 1 
[5,] 1 0 0 2 2 1 
[6,] 1 0 0 2 2 1 
[7,] 1 1 0 0 2 2 
[8,] 1 1 0 0 2 2 
[9,] 2 1 1 0 0 2 
[10,] 2 1 1 0 0 2 
[11,] 2 2 1 1 0 0 
[12,] 2 2 1 1 0 0 

A行列を構成する他の方法はありますか?たとえば、関数を使用します。

答えて

1

次を使用することができます。

circular_matrix <- function(x, ncol) { 

coll <- list(x) 
for (i in 1:(ncol-1)) { 

    current <- coll[[length(coll)]] 
    coll[[length(coll) + 1]] <- c(tail(current, 2), current[1:(length(current) - 2)]) 

} 

do.call(cbind, coll) 

} 

circular_matrix(1:10, 5) 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 9 7 5 3 
# [2,] 2 10 8 6 4 
# [3,] 3 1 9 7 5 
# [4,] 4 2 10 8 6 
# [5,] 5 3 1 9 7 
# [6,] 6 4 2 10 8 
# [7,] 7 5 3 1 9 
# [8,] 8 6 4 2 10 
# [9,] 9 7 5 3 1 
#[10,] 10 8 6 4 2