首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建这样的矩阵?

如何创建这样的矩阵?
EN

Stack Overflow用户
提问于 2015-04-13 02:09:32
回答 2查看 55关注 0票数 1

给定从1到12的数字,是否有任何现有的函数可以创建下面的矩阵,并在这里选择指定类似size的内容?我只能考虑使用by.column创建每个矩阵,并使用rbind将它们绑定在一起。有更干净的选择吗?

代码语言:javascript
复制
m <- matrix(1:12, ncol=3, byrow=TRUE)

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

期望产出:

代码语言:javascript
复制
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
[3,]    7    9   11
[4,]    8   10   12

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-13 02:21:03

也许这更简洁(考虑到矩阵,而不是向量,因为您没有指定列数):

代码语言:javascript
复制
m <- matrix(1:12, ncol=3, byrow=TRUE)

size <- 2
cols <- ncol(m)
m2 <- c(apply(m, 1, c))

do.call(rbind, lapply(split(m2, rep(seq_len(length(m2) /(size*cols)), each = size*cols)), matrix, nrow = size))

##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## [3,]    7    9   11
## [4,]    8   10   12
票数 2
EN

Stack Overflow用户

发布于 2015-04-13 05:36:44

我认为aperm()在这里是有用的

代码语言:javascript
复制
mymat<-function(size, ncol=3, start=1, end=12) {
    v <- start:end
    stopifnot(length(v)%%ncol==0, length(v)%%size==0)

    a <- array(v, dim=c(length(v)/ncol/size, ncol, size))
    matrix(aperm(a, c(1,3,2)), ncol=ncol)
}

mymat(2)
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
# [3,]    7    9   11
# [4,]    8   10   12
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29596924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档