Closed
Description
openedon Sep 28, 2018
According to the documentation
Indexing by a boolean vector B is effectively the same as indexing by the vector of integers that is returned by findall(B).
This seems to be confirmed on 1d array. However a big difference of performance can be observed on 2d array. Compare the following two ways of logical indexing
X = rand(10^4,10^4)
idx = X.>0.5
# method 1: indexing by boolean vector
@time for n=1:size(X,2)
view(X, idx[:,n], n)
end
# method 2: indexing by position
@time for n=1:size(X,2)
view(X, findall(idx[:,n]), n)
end
In general the second method is 2x more efficient
0.857407 seconds (138.47 k allocations: 398.172 MiB, 37.71% gc time)
0.413342 seconds (118.47 k allocations: 397.715 MiB, 13.95% gc time)
and the gap can be even larger in realistic situations.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment