将方阵分成对

发布于 2024-12-23 05:16:37 字数 408 浏览 1 评论 0原文

我有一个大方阵 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))更简单的方法?谢谢

I have a large square matrix 12128 x 12128. Example

      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

I have a list of pairs (# 18000), which exist in all the possible pairs from the matrix

 A   B
 B   E
 C   E

I need the values for only the pairs in my list from the matrix. Is there a easier way to do it rather than breaking down the whole matrix (melt(matrix))? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷︶言冷语的世界 2024-12-30 05:16:37

使用另一篇文章中的 mind 作为测试数据试试这个:

m[ind]

编辑:

如果行和列名称可以有重复(如后面的评论中所建议的)并且如果我们想要其中的所有可能值,然后尝试以下操作:

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

Using m and ind from the other post as test data try this:

m[ind]

EDIT:

If the row and column names can have duplicates (as suggested in a later comment) and if we want all possible values from these then try this:

merge(as.data.frame.table(m), ind, by = 1:2)
无声静候 2024-12-30 05:16:37

我对此方法的性能特征不做任何承诺,因为您的实际数据相当大,但这至少可以为您提供使用所需的工具:

#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))])

I make no promises about the performance characteristics of this method, since you actual data is fairly large, but this may at least give you the necessary tools to work with:

#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))])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文