假设我在Julia中有以下4x4 Array
:
julia> A=rand(4,4)
4×4 Array{Float64,2}:
0.00624508 0.624399 0.458094 0.341848
0.303817 0.269487 0.580949 0.534655
0.748525 0.419411 0.469938 0.659914
0.730659 0.191461 0.996144 0.74772
我还有另一个6x2 Array
,其中每一行代表一个行-列对:
julia> B=[ 1 1; 1 3; 2 2; 2 4; 3 1; 3 3]
6×2 Array{Int64,2}:
1 1
1 3
2 2
2 4
3 1
3 3
B
的第一行代表[1,1]
的元素A
,B
的第二行代表[1,3]
的元素A
, 等等。我想基于A
每行给出的坐标来访问B
的元素。例如,在R
中,命令A[B]
给出了我想要的:0.00624508 0.458094 0.269487 0.534655 0.748525 0.469938
,但是在Julia中,相同的命令给出了
julia> A[B]
6×2 Array{Float64,2}:
0.00624508 0.00624508
0.00624508 0.748525
0.303817 0.303817
0.303817 0.730659
0.748525 0.00624508
0.748525 0.748525
这不是我想要的。在Julia中是否有类似的编码A[B]
的方式,以便获得R
中获得的信息?必须适用于任何数组。
答案 0 :(得分:2)
从索引对中构造CartesianIndex
数组:
julia> A[CartesianIndex.(B[:, 1], B[:, 2])]
6-element Array{Float64,1}:
0.987200021334854
0.5261639427155012
0.8430528192705655
0.5300778835366697
0.5044387593056074
0.0025132074927423087
正如您所观察到的那样,有必要将这种“点索引”与“形状索引”区分开来(我做了这些术语)。
理想情况下,您已经将B
构造成这样的数组,但是,这并不总是可行的。