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