gpt4 book ai didi

indexing - Julia - 将 CartesianIndices 与数组一起使用

转载 作者:行者123 更新时间:2023-12-04 09:06:01 25 4
gpt4 key购买 nike

我正在尝试访问 NxN 矩阵“msk”的特定元素,索引存储在 Mx2 数组“idx”中。我尝试了以下方法:

N = 10
msk = zeros(N,N)
idx = [1 5;6 2;3 7;8 4]
#CIs = CartesianIndices(( 2:3, 5:6 )) # this works, but not what I want
CIs = CartesianIndices((idx[:,1],idx[:,2]))
msk[CIs] .= 1

我得到以下信息:错误:LoadError:MethodError:没有方法匹配 CartesianIndices(::Tuple{Array{Int64,1},Array{Int64,1}})

最佳答案

这是你想要的吗? (我正在使用你的定义)

julia> msk[CartesianIndex.(eachcol(idx)...)] .= 1;

julia> msk
10×10 Array{Float64,2}:
0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

请注意,我使用了 CartesianIndex 的向量:

julia> CartesianIndex.(eachcol(idx)...)
4-element Array{CartesianIndex{2},1}:
CartesianIndex(1, 5)
CartesianIndex(6, 2)
CartesianIndex(3, 7)
CartesianIndex(8, 4)

作为 CartesianIndices 是:

Define a region R spanning a multidimensional rectangular range of integer indices.

所以它定义的区域一定是矩形的。

获取所需索引的另一种方法是例如:

julia> CartesianIndex.(Tuple.(eachrow(idx)))
4-element Array{CartesianIndex{2},1}:
CartesianIndex(1, 5)
CartesianIndex(6, 2)
CartesianIndex(3, 7)
CartesianIndex(8, 4)

或者(这次我们对 msk 使用线性索引,因为它只是一个 Matrix)

julia> [x + (y-1)*size(msk, 1) for (x, y) in eachrow(idx)]
4-element Array{Int64,1}:
41
16
63
38

关于indexing - Julia - 将 CartesianIndices 与数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63448465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com