我希望在特定范围之间过滤数据。
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)]
答案 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
。