如何解决Julia-将CartesianIndices与数组配合使用
我正在尝试访问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
如下:
定义一个
R
区域,该区域跨越整数索引的多维矩形范围。
因此它定义的区域必须是矩形。
获取所需索引的另一种方法是:
julia> CartesianIndex.(Tuple.(eachrow(idx)))
4-element Array{CartesianIndex{2},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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。