2015-11-05 108 views
2

我想为每个行使用不同(但是一个)列的矩阵子集。所以适用可以做这份工作吗?但也可以聪明的子集可以工作,但我还没有找到一个解决方案。计算时间是一个问题 - 我有一个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) 

回答

3

我们可以试试行/列索引

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

谢谢! cbind做的伎俩,我总是尝试与M(c(1:nrow(M),v),并不能找出什么是错的。 – burbot

2

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

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