Given a matrix, which will be large (say 10^5 x 10^5), I need to extract the list of indices (i.e. the pairs (x,y) of positions) of those places in the matrix
where the value stored satisfies a certain condition. For a minimal example, the condition can just be that the value is greater than 0.5.
The code below achieves this, but seems inefficient, since it constructs the whole array of indices, even though there may be only a few places where the condition is satisfied.
Is there an "if" clause in an array comprehension? -- adding this to the definition of 'indices' would seem to do what I want, but I have not found this syntax in the manual for arrays.
David.
julia> L = 5
5
julia> r= rand(L, L)
5x5 Array{Float64,2}:
0.705585 0.534721 0.158935 0.343876 0.624299
0.0624089 0.525414 0.131139 0.590439 0.554686
0.190085 0.557751 0.591916 0.485526 0.6307
0.365398 0.943102 0.575083 0.858705 0.105142
0.047924 0.116424 0.756757 0.576293 0.461547
julia> indices = [(x,y) for x in 1:L, y in 1:L]
5x5 Array{(Any,Any),2}:
(1,1) (1,2) (1,3) (1,4) (1,5)
(2,1) (2,2) (2,3) (2,4) (2,5)
(3,1) (3,2) (3,3) (3,4) (3,5)
(4,1) (4,2) (4,3) (4,4) (4,5)
(5,1) (5,2) (5,3) (5,4) (5,5)
julia> where = indices[r .> 0.5]
14-element Array{(Any,Any),1}:
(1,1)
(1,2)
(2,2)
(3,2)
(4,2)
(3,3)
(4,3)
(5,3)
(2,4)
(4,4)
(5,4)
(1,5)
(2,5)
(3,5)