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)