设一个数组:
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
答案 0 :(得分:26)
>>> a[ (3>a[:,1]) & (a[:,1]>-6) ]
array([[ 1, 2],
[ 3, -5]])
答案 1 :(得分:5)
np.ma.masked_inside(a, -6, 3)
将创建一个MaskedArray
对象,其中-6和3之间的值被屏蔽(即标记为无效)。换句话说,您过滤 out 介于-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)
请注意,使用此函数,您将逐个元素地过滤掉整个数组,这不是您想要的。
另一种解决方案中给出的索引方法是迄今为止最直接和最容易理解的方法。