【问题标题】:Pulling out multiple indices from a matrix从矩阵中提取多个索引
【发布时间】:2025-12-16 07:40:02
【问题描述】:

我不明白将较小矩阵的上三角形作为索引传递给较大矩阵时得到的结果。

此问题的答案中使用了此技术:Create a Correlation Matrix From a Correlation Vector in R (注意:在链接的帖子中,矩阵大小是相同的,而在我的示例中它们不是。)

在下面的第一个示例中,为什么会打印 10 而索引 > [2,2] 处的任何其他值不打印?我原以为只会打印 [1,2] 处的值。

largeMatrix <- matrix(1:12, ncol=2, byrow=TRUE)

largeMatrix
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8
[5,]    9   10
[6,]   11   12

smallMatrix <- matrix(1:4, ncol=2, byrow=TRUE)

smallMatrix
     [,1] [,2]
[1,]    1    2
[2,]    3    4

upperTriangleSmall <- upper.tri(smallMatrix)

upperTriangleSmall
      [,1]  [,2]
[1,] FALSE  TRUE
[2,] FALSE FALSE


largeMatrix[upperTriangleSmall]
[1]  5  2 10

我对预期输出的看法:

Either:

2

Or:

2 5 6 7 8 9 10

当将一个矩阵的上三角形作为索引传递给另一个相同大小的矩阵时,我理解结果。

smallMatrix <- matrix(1:4, ncol=2, byrow=TRUE)

smallMatrix
     [,1] [,2]
[1,]    1    2
[2,]    3    4


newSmallMatrix <- matrix(7:10, ncol=2, byrow=TRUE)

newSmallMatrix
     [,1] [,2]
[1,]    7    8
[2,]    9    10

newSmall[upperTriangleSmall]
[1] 8

【问题讨论】:

  • 没想到(愚蠢的我),但我的问题仍然存在。我正在传递一个布尔矩阵作为索引,但我不明白为什么要打印打印的索引(更新的问题)。

标签: r matrix


【解决方案1】:

如果将矩阵转换为向量,您会看到更好,矩阵元素按列索引,如果您通过单个索引访问矩阵,您可以找出它,例如,largeMatrix[1] 给出1,@987654323 @给3等:

as.vector(largeMatrix)
# [1]  1  3  5  7  9 11  2  4  6  8 10 12

as.vector(upperTriangleSmall)
# [1] FALSE FALSE  TRUE FALSE

所以它的作用是为每个四个元素的块拾取第三个元素,由于两个矩阵的长度不一样,它被回收并拾取5, 2, 10

【讨论】:

  • 这是 R 在内部决定选择哪些元素的操作吗?
  • 我不完全确定内部实现。但在许多方面,矩阵的行为就像一个一维向量。例如,可以通过答案中所示的单个索引访问其元素。