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)