如何通过用一对向量索引矩阵来获取向量?
How to get a vector by indexing a matrix with pair of vectors?
给定两个向量,它们是索引列表的组成部分,我如何通过它们成对索引矩阵?如果我按原样使用它们,我会得到笛卡尔积(与其他语言中的花式索引一致):
> 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”不是一个很好的 googleable 关键字没有帮助。)
“索引”在 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
给定两个向量,它们是索引列表的组成部分,我如何通过它们成对索引矩阵?如果我按原样使用它们,我会得到笛卡尔积(与其他语言中的花式索引一致):
> 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”不是一个很好的 googleable 关键字没有帮助。)
“索引”在 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