Julia 如何通过索引元素的N个数组访问多维数组?

Julia 如何通过索引元素的N个数组访问多维数组?,julia,Julia,假设我们有 A = [1 2; 3 4] 在numpy中,将生成以下语法 A[[1,2],[1,2]] = [1,4] 但是,在julia中,下面产生了一个输出 A[[1,2],[1,2]] = [1 2; 3 4] 有没有一种简洁的方法可以在不使用for循环的情况下实现与numpy相同的功能?要获得您想要的功能,我将使用CartesianIndex如下所示: julia> A[CartesianIndex.([(1,1), (2,2)])] 2-element Vector{Int

假设我们有

A = [1 2; 3 4]
在numpy中,将生成以下语法

A[[1,2],[1,2]] = [1,4]
但是,在julia中,下面产生了一个输出

A[[1,2],[1,2]] = [1 2; 3 4]

有没有一种简洁的方法可以在不使用for循环的情况下实现与numpy相同的功能?

要获得您想要的功能,我将使用
CartesianIndex
如下所示:

julia> A[CartesianIndex.([(1,1), (2,2)])]
2-element Vector{Int64}:
 1
 4


正如Bogumil所说,您可能希望使用
CartesianIndex
。但是,如果您想从为每个维度提供索引向量中获得结果,就像在Python
[1,2],[1,2]
示例中一样,您需要先
zip
这些索引:

julia> A[CartesianIndex.(zip([1,2], [1,2]))]
2-element Vector{Int64}:
 1
 4
这是怎么回事
zip
同时遍历两个索引向量(如a),并返回索引元组上的迭代器:

julia> zip([1,2],[1,2]) # is a lazy iterator
zip([1, 2], [1, 2])

julia> collect(zip([1,2],[1,2])) # collect to show all the tuples
2-element Vector{Tuple{Int64, Int64}}:
 (1, 1)
 (2, 2)
然后,
CartesianIndex
将它们转换为笛卡尔指数,然后可以使用笛卡尔指数获得
A
中的相应值:

julia> CartesianIndex.(zip([1,2],[1,2]))
2-element Vector{CartesianIndex{2}}:
 CartesianIndex(1, 1)
 CartesianIndex(2, 2)

如果这些是对角线上的元素,你也可以试试'LinearAlgebra.diag(A)`
julia> CartesianIndex.(zip([1,2],[1,2]))
2-element Vector{CartesianIndex{2}}:
 CartesianIndex(1, 1)
 CartesianIndex(2, 2)