Hi,

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 a more efficient way of doing this? 
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.

Thanks,
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)

Reply via email to