julia - CartesianIndex 的运算

标签 julia

我想知道如何使用 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/

相关文章:

r - Julia 中的向量列表比 R 慢?

arrays - 删除 Julia 中的连续重复项

julia - 在包代码上使用 Infiltrator.jl 而无需将 Infitrator 添加到 Project.toml

amazon-s3 - Julia 从 s3 csv 文件加载数据框

julia - 在 Julia 1.0 中,如何设置只有一个键值对的命名元组?

arrays - Julia:在 for 循环中累积数组(循环局部范围的问题)

function - Julia:如何轻松查看函数的源代码(例如 Statistics.jl 包中的 `quantile` 函数)

dataframe - Julia数据框直接访问行

vim - julia-vim 中的 Julia 语法高亮

matrix - 在 Julia 中将元组向量转换为矩阵