如何通过用向量对索引矩阵来获得向量?

时间:2020-10-22 08:36:22

标签: r arrays indexing array-broadcasting

给出两个向量,它们是索引列表的组成部分,如何用它们成对对矩阵进行索引?如果我照原样使用它们,我会得到笛卡尔积(与其他语言的花哨索引一致):

> x
           [,1]      [,2]        [,3]
[1,]  0.4636395 0.7937225  0.81670694
[2,] -1.0591770 0.7515119  1.31597748
[3,] -0.5215888 1.2026196 -0.03518676
> x[c(1,2), c(1, 1)]
           [,1]       [,2]
[1,]  0.4636395  0.4636395
[2,] -1.0591770 -1.0591770

我真的想要

> c(x[1, 1], x[2, 1])
[1]  0.4636395 -1.0591770

在Julia中,我可以写得很简洁:

julia> x[CartesianIndex.([1, 2], [1, 1])] # not the same x here, but still 3x3
2-element Array{Float64,1}:
 0.5815007881748451
 0.6563715338911154

在Matlab中,有人告诉我等效的方法是手动将其转换为线性索引:

x(sub2ind(A, [1, 2], [1, 1]))

如何在R中做到这一点?

(对于this answer,这实际上是一个不同的问题,但是我确实无法通过搜索轻松地找到解决方案。特别是没有重复项,即使我以为一定是一个常见问题。“ R”不是易于搜索的关键字没有帮助。)

1 个答案:

答案 0 :(得分:1)

“索引”在R中通常称为"subsetting"。在这种情况下,您必须通过矩阵进行子集化。通过cbind将向量放在一起可以最容易地构建它们:

> cbind(c(1,2), c(1, 1))
     [,1] [,2]
[1,]    1    1
[2,]    2    1
> x[cbind(c(1,2), c(1, 1))]
[1]  0.4636395 -1.0591770
相关问题