2011-12-25 85 views
2

我有一個大方矩陣12128 x 12128。例如把方矩陣分解成對

 A B C D  E 
A 0.5 0.4 0.1 0.02 0.4 
B 0.1 0.3 0.07 0.03 0.9 
C 0.8 0.04 0.5 0.4 0.4 
D 3.4 5.6 9.5 2  2.1 
E 0.6 9.1 0.3 0.5 1.2 

我對(#18000),在所有可能的對存在於距矩陣

A B 
B E 
C E 

我需要在我的名單僅用於對值從矩陣列表。有沒有更簡單的方法來做到這一點,而不是打破整個矩陣(melt(matrix))?由於

回答

5

使用mind從其他職位作爲測試數據試試這個:

m[ind] 

編輯:

如果行和列的名稱可以有重複(如後面的評論中所建議的),如果我們想要從這些值得到所有可能的值,那麼試試這個:

merge(as.data.frame.table(m), ind, by = 1:2) 
+0

+1好主人,我總是忘掉那個! – joran 2011-12-26 00:38:38

+0

我的'rownames'和'colnames'不是唯一的。如果這會導致問題。我不斷收到'下標越界' – y2p 2011-12-26 01:41:28

+0

已經添加了第二種解決方案,即使存在可能的重複,也會給出'ind'中滿足行/列對的所有值。 – 2011-12-26 14:17:53

1

我並沒有關於這個方法的性能特點的承諾,因爲你實際的數據是相當大的,但是這至少可以給你必要的工具一起工作:

#Some example data like yours 
m <- matrix(1:25,5,5) 
rownames(m) <- letters[1:5] 
colnames(m) <- letters[1:5] 

#Matrix of row/col indices to select 
ind <- cbind(c('a','e','b'),c('d','a','d')) 

#Select elements of m matching ind 
diag(m[match(ind[,1],rownames(m)),match(ind[,2],colnames(m))])