【问题标题】:How to subset a matrix with different column positions for each row? [duplicate]如何对每行具有不同列位置的矩阵进行子集化? [复制]
【发布时间】:2016-02-06 03:44:25
【问题描述】:

我想为每一行使用不同的(但一个)列来对矩阵进行子集化。那么apply apply可以完成这项工作吗?但可能智能子集也可以工作,但我还没有找到解决方案。计算时间是一个问题——我有一个带有 for 循环的解决方案,但是在 RAM 中多次加载矩阵太慢了。 这是一个例子:

给定矩阵M和向量v,

M<-matrix(1:15,nrow=5,ncol=3)

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

v<-c(3,1,1,2,1)

解决办法是:

(11,2,3,9,5)

【问题讨论】:

    标签: r matrix subset


    【解决方案1】:

    我们可以试试行/列索引

    M[cbind(1:nrow(M), v)]
    #[1] 11  2  3  9  5
    

    【讨论】:

    • 谢谢! cbind 可以解决问题,我总是尝试使用 M(c(1:nrow(M),v) 并且不知道出了什么问题。
    【解决方案2】:

    只是为了好玩,这是另一个使用矢量索引的解决方案

    t(M)[v + (seq_len(nrow(M)) - 1) * ncol(M)]
    # [1] 11  2  3  9  5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 2018-08-07
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多