如何在Julia中实现类似于Fancy索引的东西?

NIT*_*GUP 2 indexing julia

我非常喜欢朱莉娅.因此,如果这是一个愚蠢的问题,请原谅.

我有一个4*4矩阵AA.

julia> AA
4×4 Array{Int64,2}:
  1   2   3   4
  5   6   7   8
  9  10  11  12
 13  14  15  16
Run Code Online (Sandbox Code Playgroud)

我有一个数组pvpq包含索引信息.

julia> pv
3-element Array{Int64,1}:
 1
 3
 4

julia> pq
3-element Array{Int64,1}:
 2
 1
 4
Run Code Online (Sandbox Code Playgroud)

我希望分配为零的元素AA[1,2],AA[3,1]AA[4,4].

如果我运行,AA[pv,pq] = 0那么输出是:

4×4 Array{Int64,2}:
 0  0   3  0
 5  6   7  8
 0  0  11  0
 0  0  15  0 
Run Code Online (Sandbox Code Playgroud)

但我需要这个作为输出

4×4 Array{Int64,2}:
  1   0   3   4
  5   6   7   8
  0  10  11  12
 13  14  15  0
Run Code Online (Sandbox Code Playgroud)

我知道这在Python中被称为Fancy Indexing.但是,我怎么能在朱莉娅这样做呢?我不能运行两个带有检查行和列索引的变量的if语句.

谢谢

DSM*_*DSM 7

另一种选择是使用CartesianIndex:

julia> AA[CartesianIndex.(pv, pq)]
3-element Array{Int64,1}:
  2
  9
 16

julia> AA[CartesianIndex.(pv, pq)] .= 0
3-element view(::Array{Int64,2}, CartesianIndex{2}[CartesianIndex(1, 2), CartesianIndex(3, 1), CartesianIndex(4, 4)]) with eltype Int64:
 0
 0
 0

julia> AA
4×4 Array{Int64,2}:
  1   0   3   4
  5   6   7   8
  0  10  11  12
 13  14  15   0
Run Code Online (Sandbox Code Playgroud)

请注意,您必须使用.=而不是=或者您将no method matching setindex_shape_check(::Int64, ::Int64)在1.0中得到一个神秘的错误..这在0.7中给出了一个很好的弃用警告,这是我应该仍然使用的.;-)