indexing - 如何在 Julia 中实现类似于花式索引的东西?

标签 indexing julia

我对 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

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

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/

相关文章:

module - 尝试在 Julia 中加载包

mongodb - 为什么索引的方向在 MongoDB 中很重要?

mysql - MySQL 中的奇异 GROUP BY

python - 如何将pandas dataframe进行groupby操作后得到的数据结构转换成dataframe?

mysql - 我是否需要为具有单行(设置表)的 MySQL 表定义索引

installation - 错误: expected package `Juno [e5e0dc1b]` to be registered

arrays - Julia:将元素附加到自定义类型数组

bash - 当使用 "nohup"时,打印函数在整个程序完成之前不会打印

julia - 如何使用 ModelingToolkit.jl 动态创建变量

arrays - 从向量的非零值获取相对中间索引