根据在一个范围内的值的滤波线在numpy的阵列(filtering lines in a numpy

2019-08-01 21:52发布

让一个数组:

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

得到线与上述第二列的元件-6它是可能做到

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

但如何获得与-6之间的第二元件线; 3? 我试过了:

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

并且还(这引发错误):

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

这使:

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

但结果不是太清楚

由于JP

Answer 1:

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

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


Answer 2:

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.



文章来源: filtering lines in a numpy array according to values in a range
标签: numpy range