R中的逐块矩阵传递

时间:2016-02-24 18:08:07

标签: r matrix

我有以下格式的矩阵a

> a
      [,1] [,2]
 [1,]    1    2
 [2,]    1    2
 [3,]    1    2
 [4,]    3    4
 [5,]    3    4
 [6,]    3    4

我想得到以下结果:

> aprime
       [,1] [,2] [,3] 
  [1,]    1    1    1 
  [2,]    2    2    2 
  [3,]    3    3    3
  [4,]    4    4    4 

这是一种方法:

aprime <- matrix(0, 4, 3)
aprime[1:2, ] <- t(a[1:3, ])
aprime[3:4, ] <- t(a[4:6, ])

然而,这很慢,我需要在非常大的矩阵上多次执行此操作。另一种方法:

aprime <- matrix(t(a), 4, 3)

但是会产生

> aprime
      [,1] [,2] [,3]
 [1,]    1    1    3
 [2,]    2    2    4
 [3,]    1    3    3
 [4,]    2    4    4

最后     t(矩阵(a,3,4))

产生

> aprime
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    3    3    3
[3,]    2    2    2
[4,]    4    4    4

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

转换为3维数组,置换尺寸并重新整形为矩阵:

matrix(aperm(array(a, c(3, 2, 2)), 3:1), 4)

,并提供:

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4

注意: a的可重现形式为:

a <- matrix(c(1, 1, 1, 3, 3, 3, 2, 2, 2, 4, 4, 4), 6)