根据范围内的值过滤numpy数组中的行

hvvq6cgz  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(124)

设一个数组:

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

gmxoilav

gmxoilav1#

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

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

dauxcl2d2#

np.ma.masked_inside(a, -6, 3)将创建一个MaskedArray对象,其中-6和3之间的值被屏蔽(即标记为无效)。换句话说,您正在过滤-6和3之间的值。相反,您应该使用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)

请注意,使用此函数,您将逐个元素地过滤掉整个数组,这不是您想要的。
另一种解决方案中给出的索引方法是迄今为止最直接和最容易理解的。

相关问题