如何对每行具有不同列位置的矩阵进行子集化?

How to subset a matrix with different column positions for each row?

我想对每一行使用不同(但只有一个)列的矩阵进行子集化。那么propably 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)

我们可以尝试 row/column 索引

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

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

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