从矩阵

时间:2016-07-06 23:48:34

标签: r matrix

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

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

在下面的第一个例子中,为什么10会被打印,为什么不在index>处的任何其他值? [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

1 个答案:

答案 0 :(得分:1)

如果将矩阵转换为矢量,您可以更好地看到,矩阵元素按列索引,如果您通过单个索引访问矩阵,则可以找到该值,例如largeMatrix[1]给出1 },largeMatrix[2]提供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