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

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

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

array([[ 1,  2],
      [ 3, -5]])

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, youre 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.

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

Leave a Reply

Your email address will not be published.