arraysjulia

How to select elements from array in Julia matching predicate?


Julia appears to have a lot of Matlab like features. I'd like to select from an array using a predicate. In Matlab I can do this like:

>> a = 2:7 ;
>> a > 4

ans =

     0     0     0     1     1     1

>> a(a>4)

ans =

     5     6     7

I found a kind of clunky seeming way to do part of this in Julia:

julia> a = 2:7
2:7

julia> [int(x > 3) for x in a]
6-element Array{Any,1}:
 0
 0
 1
 1
 1
 1

(Using what wikipedia calls list comprehension). I haven't figured out how to apply a set like this to select with in Julia, but may be barking up the wrong tree. How would one do a predicate selection from an array in Julia?


Solution

  • You can use a very Matlab-like syntax if you use a dot . for elementwise comparison:

    julia> a = 2:7
    2:7
    
    julia> a .> 4
    6-element BitArray{1}:
     false
     false
     false
      true
      true
      true
    
    julia> a[a .> 4]
    3-element Array{Int32,1}:
     5
     6
     7
    

    Alternatively, you can call filter if you want a more functional predicate approach:

    julia> filter(x -> x > 4, a)
    3-element Array{Int32,1}:
     5
     6
     7