我想知道如何使用 CartesianIndex 进行操作。例如我有数组
julia> A = rand(1:5, 10, 2)
10×2 Array{Int64,2}:
2 5
1 1
4 5
4 1
2 1
4 1
2 4
1 5
2 5
4 4
我想保存与数字 1 靠近(成对)的所有数字。我可以使用 c=findall(x->x==1, A)
,但我的笛卡尔索引为“1”。
有功能x=getindex.(c, [1 2])
它创建了一个我可以更改的数组,但我不知道如何将其转换回 CartesianIndex。我认为这一定是更好的方法。
最佳答案
A[view(A.==1,:,[2,1])]
这实际上返回“与数字 1 成对的所有数字”。
返回数字的顺序是柱状的。如果你想按行返回:
A'[view(A.==1,:,[2,1])']
示例:
julia> A = rand(1:5, 10, 2)
10×2 Array{Int64,2}:
1 4
3 3
1 3
3 3
5 1
1 5
2 1
3 3
1 3
2 3
julia> A'[view(A.==1,:,[2,1])']
6-element Array{Int64,1}:
4
3
5
5
2
3
如果您想要完整的行而不是使用过滤器!
:
julia> filter!((x)->(1 in x), collect(eachrow(A)))
6-element Array{SubArray{Int64,1,Array{Int64,2},Tuple{Int64,Base.Slice{Base.OneTo{Int64}}},true},1}:
[1, 4]
[1, 3]
[5, 1]
[1, 5]
[2, 1]
[1, 3]
关于julia - CartesianIndex 的运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60917543/