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))?ありがとう

4

2 に答える 2

5

テストデータとして他の投稿からのを使用mして、これを試してください:ind

m[ind]

編集:

行名と列名が重複している可能性があり(後のコメントで提案されているように)、これらから可能なすべての値が必要な場合は、次のことを試してください。

merge(as.data.frame.table(m), ind, by = 1:2)
于 2011-12-25T23:21:16.827 に答える
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))])
于 2011-12-25T21:51:58.353 に答える