R中的双循环矩阵

时间:2017-11-19 09:51:51

标签: r matrix

如何构建双循环矩阵?

例如,下面的矩阵A是双循环的,即每一列(期望来自第一列)是通过将最后两个元素作为第一个来获得的。请注意,第一列是矩阵的生成器。

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 个答案:

答案 0 :(得分: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