我对 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
我有一个包含索引信息的数组 pv
和 pq
。
julia> pv
3-element Array{Int64,1}:
1
3
4
julia> pq
3-element Array{Int64,1}:
2
1
4
我希望将零分配给元素 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
但我需要这个作为输出
4×4 Array{Int64,2}:
1 0 3 4
5 6 7 8
0 10 11 12
13 14 15 0
我知道这在 Python 中称为 Fancy Indexing。但是,我怎样才能在 Julia 中做到这一点?我无法使用检查行和列索引的变量运行两个 if 语句。
谢谢
最佳答案
另一种选择是使用 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
请注意,您必须使用 .=
而不是 =
否则您将得到一个神秘的 no 方法匹配 setindex_shape_check(::Int64,::Int64 )
1.0 中的错误.. 在 0.7 中给出了一个很好的弃用警告,这是我可能仍然应该使用的。 ;-)
关于indexing - 如何在 Julia 中实现类似于花式索引的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611462/