2015-11-05 72 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 
相關問題