在一个维度上过滤保留阵列的形状

时间:2016-02-15 03:35:19

标签: python numpy

我想有选择地过滤numpy数组,但仍保留返回蒙版的形状。

过滤应该应用于维[:, 1],但仍然会为所有其他维度元素返回False(对于[:,:] - [:, 1]的集合)。

这是我在[:, 1]上过滤时的结果:

>>> a = np.asarray([[1, 2, 3], [3, 4, 5]])
>>> a[:,1] > 3
array([False,  True], dtype=bool)

但我真的很喜欢两者的混合物(具有以下面具的形状)

>>> a[:,:] > 3
array([[False, False, False],
       [False,  True,  True]], dtype=bool)

所以我认为在这种情况下预期结果将是

                 +-- this is the dimension the filter condition should be applied to
                 V
array([[False, False, False],
       [False,  True, False]], dtype=bool)

更新

我可能已经找到了这样做的方法:

>>> a[:,[False,True,False]] > 3
array([[False, False, False],
       [False,  True, False]], dtype=bool)

查看我要做的事情(从维度0 :过滤所有内容,过滤维度1 [False, True, False]中的索引1)。如果不知道维度的确切长度(甚至甚至没有生成冗长的bool数组),我将如何有效地执行此操作(辅助函数?)?

1 个答案:

答案 0 :(得分:2)

一种方法是将遮罩预设为false并仅填充感兴趣的列

a = np.asarray([[1, 2, 3], [3, 4, 5]])

mask = np.zeros(a.shape,dtype=np.bool)

mask[:,1] = a[:,1] > 3

print mask

返回

[[False False False]
 [False  True False]]