R 改变矩阵维数

R 改变矩阵维数,r,matrix,R,Matrix,让我们做一个可复制的例子: 这是我的初始矩阵 d<- matrix(1:80,,5) d [,1] [,2] [,3] [,4] [,5] [1,] 1 17 33 49 65 [2,] 2 18 34 50 66 [3,] 3 19 35 51 67 [4,] 4 20 36 52 68 [5,] 5 21 37 53 69 [6,] 6 22 38

让我们做一个可复制的例子:

这是我的初始矩阵

d<- matrix(1:80,,5)
d
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   17   33   49   65
[2,]    2   18   34   50   66
[3,]    3   19   35   51   67
[4,]    4   20   36   52   68
[5,]    5   21   37   53   69
[6,]    6   22   38   54   70
[7,]    7   23   39   55   71
[8,]    8   24   40   56   72
[9,]    9   25   41   57   73
[10,]   10   26   42   58   74
[11,]   11   27   43   59   75
[12,]   12   28   44   60   76
[13,]   13   29   45   61   77
[14,]   14   30   46   62   78
[15,]   15   31   47   63   79
[16,]   16   32   48   64   80
有什么帮助吗?谢谢

我们可以试试

d1 <- array(d, c(4, 4, 5))
do.call(rbind, lapply(seq(dim(d1)[3]), function(i) d1[,,i]))
#       [,1] [,2] [,3] [,4]
# [1,]    1    5    9   13
# [2,]    2    6   10   14
# [3,]    3    7   11   15
# [4,]    4    8   12   16
# [5,]   17   21   25   29
# [6,]   18   22   26   30
# [7,]   19   23   27   31
# [8,]   20   24   28   32
# [9,]   33   37   41   45
#[10,]   34   38   42   46
#[11,]   35   39   43   47
#[12,]   36   40   44   48
#[13,]   49   53   57   61
#[14,]   50   54   58   62
#[15,]   51   55   59   63
#[16,]   52   56   60   64
#[17,]   65   69   73   77
#[18,]   66   70   74   78
#[19,]   67   71   75   79
#[20,]   68   72   76   80
d1我们可以试试

d1 <- array(d, c(4, 4, 5))
do.call(rbind, lapply(seq(dim(d1)[3]), function(i) d1[,,i]))
#       [,1] [,2] [,3] [,4]
# [1,]    1    5    9   13
# [2,]    2    6   10   14
# [3,]    3    7   11   15
# [4,]    4    8   12   16
# [5,]   17   21   25   29
# [6,]   18   22   26   30
# [7,]   19   23   27   31
# [8,]   20   24   28   32
# [9,]   33   37   41   45
#[10,]   34   38   42   46
#[11,]   35   39   43   47
#[12,]   36   40   44   48
#[13,]   49   53   57   61
#[14,]   50   54   58   62
#[15,]   51   55   59   63
#[16,]   52   56   60   64
#[17,]   65   69   73   77
#[18,]   66   70   74   78
#[19,]   67   71   75   79
#[20,]   68   72   76   80

d1另一个简单的解决方案:

matrix <- matrix(seq(1,16), ncol = 4)
rbind(matrix, 
      16+matrix, 
      32+matrix, 
      48+matrix, 
      64+matrix)

matrix另一个简单的解决方案:

matrix <- matrix(seq(1,16), ncol = 4)
rbind(matrix, 
      16+matrix, 
      32+matrix, 
      48+matrix, 
      64+matrix)
矩阵使用矩阵索引

# number of new columns
cols <- 4
matrix(t(d), ncol=cols)[matrix(1:(length(d)/cols), ncol=ncol(d), byrow=TRUE), ]
使用矩阵索引

# number of new columns
cols <- 4
matrix(t(d), ncol=cols)[matrix(1:(length(d)/cols), ncol=ncol(d), byrow=TRUE), ]
另一种方法:

n = 4
matrix(aperm(array(d, c(n, nrow(d)/n, ncol(d))), c(1, 3, 2)), ncol = nrow(d)/n)
另一种方法:

n = 4
matrix(aperm(array(d, c(n, nrow(d)/n, ncol(d))), c(1, 3, 2)), ncol = nrow(d)/n)

我们可以直接这样做

do.call(rbind,lapply(1:ncol(d),function(t) matrix(d[,t],ncol = 4)))

我们可以直接这样做

do.call(rbind,lapply(1:ncol(d),function(t) matrix(d[,t],ncol = 4)))