我想有选择地过滤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数组),我将如何有效地执行此操作(辅助函数?)?
答案 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]]