范围之间的条件子集数组

时间:2018-06-28 13:54:34

标签: julia

我希望在特定范围之间过滤数据。

dummy = [1,2,3,4,5,6,7,8,9,10]

这适用于单个条件:

dummy[dummy .> 4]

如果我尝试设置范围:

dummy[dummy .> 4 & dummy .< 7]

此逻辑未提供预期的输出过滤> 4和<7。

这成功了

dummy[(dummy .> 4) .& (dummy .< 7)]

1 个答案:

答案 0 :(得分:3)

通过布尔数组建立索引,dummy[(4 .< dummy) .& (dummy .< 7)]dummy[4 .< dummy .< 7]应该有效;由于运算符的优先级,第一个代码段中的括号是必需的。为了使更大的过滤器更加清晰,可以使用@.宏将布尔数组的生成向量化:

dummy[@. 4 < dummy < 7]

请注意,使用布尔数组进行过滤将为中间数组分配内存;因此,filter / filter!函数可能会派上用场。以下两个调用是等效的,后者在较大的条件下提高了可读性。

filter(x -> 4 < x < 7, dummy)
filter(dummy) do x
    4 < x < 7
end

如果可以接受对现有数组的更改,则可以使用filter!函数代替filter