# Matlab-style Find in Mathematica? Value list and Boolean List, how to select values according to the boolean list?

I want to select elements with the true value (Indices list) in the corresponding point to the value list (MCS). Is there anything like Matlab-style Find to get the indices of true values in the boolean list and then use it like MCS[[indicesNumbers]]?

• Check for Pick on the docs – Rojo Nov 9 '13 at 19:51

As Rojo suggested, Pick works -- yet there may be other solutions.

• +1 I doubt any solution will be better than this built-in, since it is quite straightforward. The third argument defaults to True so you ca do without it – Rojo Nov 9 '13 at 19:57

Another approach is to use Position. Here's the data vector and logical vector and a way to find the indices where True occurs:

q = {True, False, False, True, False, True};
data = Range[6] + 5;
ind=Position[Boole[q], 1]
{{1},{4},{6}}


The information can then be extracted from the data vector using

Extract[data, ind]
{6, 9, 11}


Or you can bypass using Extract by direct indexing:

data[[Flatten[ind]]]


I think

Pick[MCS, Indices]


is the best answer (as discussed).

Just for variety:

Extract[MCS, Position[Indices, True]]

Cases[Thread[{MCS, Indices}], {x_, True} :> x]


and not particularly elegant:

Reap[Sow @@@ Thread[{MCS, Indices}], True, #2 &][[2, 1]]