filtering lines in a numpy array according to values in a range

Let an array:

 a =np.array([[1,2],[3,-5],[6,-15],[10,7]])

to get lines with elements of the second column above -6 it' s possible to do

>>> a[a[:,1]>-6]
array([[ 1, 2], [ 3, -5], [10, 7]])

but how to get lines with the second element between -6;3? I tried:

>>> a[3>a[:,1]>-6]

and also (which raises an error):

>>> np.ma.masked_inside(a,-6,3)

which gives:

 masked_array(data = [[-- --] [-- --] [6 -15] [10 7]], mask = [[ True True] [ True True] [False False] [False False]], fill_value = 999999)

but the result is not too clear

Thanks jp

2 Answers

>>> a[ (-6<a[:,1]) & (a[:,1]<3) ]
array([[ 1, 2], [ 3, -5]])
1

The np.ma.masked_inside(a, -6, 3) will create a MaskedArray object, where the values between -6 and 3 are masked (that is, flagged as invalid). In other terms, you're filtering out the values between -6 and 3. Instead, you should use np.ma.masked_outside(a, -6, 3):

>>> a = np.array([[1,2],[3,-5],[6,-15],[10,2]])
>>> np.ma.masked_outside(a,-6,3)
>>> masked_array(data = [[1 2] [3 -5] [-- --] [-- 2]], mask = [[False False] [False False] [ True True] [ True False]], fill_value = 999999)

Note that with this function, you are filtering out the whole array, element by element, which is not what you want.

The indexing approach given in another solution is by far the most straightforward and understandable.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like