32

I have two NumPy arrays, e.g.:

a = [1,2,3,4,5]

and a filter array, e.g.:

f = [False, True, False, False, True]

len(a) == len(f)

How can I get a new numpy array with only the values in a where the same index in f is True? In my case: [2, 5].

According to the accepted solution (with different values):

>>> a = numpy.array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> b = numpy.array([True, False, True, False, True, False, True, False, True, False])
>>> a[b]
array([1, 3, 5, 7, 9])
1
  • 2
    it looks like b is a list not an array, b must be a boolean array. Try b = np.asarray(b, 'bool') Commented Feb 15, 2012 at 16:13

2 Answers 2

44

NumPy supports boolean indexing

a[f]

This assumes that a and f are NumPy arrays rather than Python lists (as in the question). You can convert with f = np.array(f).

Sign up to request clarification or add additional context in comments.

3 Comments

Make sure b is a numpy array. Updated in answer.
I changed it according to your solution and comment in the question ... now it works, thank you!
Recently started learning numpy, and i juest wanna say boolean indexing is pretty amazing
4

If you don't already need numpy arrays, here's with a plain list:

import itertools
print itertools.compress(a, f)

For pre-2.7 versions of python, you must roll your own (see manual):

def compress(data, selectors):
    return (d for d, s in itertools.izip(data, selectors) if s)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.