假设我有一个数组,'foo',有两列。第0列的值为1到12表示月份。第1列具有相应的测量值。如果我想在12月,1月和2月(12,1,2)创建一个测量值的掩码,我会怀疑我可以:
numpy.where(foo[:,1] in (12, 1, 2), False, True)
但看起来我的聪明'in(12,1,2)'不能作为where()的条件。它似乎也不像[12,1,2]那样......
还有另一种聪明的方法吗?有没有更好的方法将所有(12,1,2)测量值收集到一个数组中?什么是numpy方式?
(重塑阵列是不可能的,因为每个月都有不规则的测量数量)
答案 0 :(得分:4)
我认为'in(12,1,2)'不起作用的原因是'in'之前的元素必须是单个元素。
但是为此,numpy有一个函数in1d
(documentation)用numpy数组做'in'。使用您的代码:
np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True)
使用评论完成答案:在这种情况下使用where
是多余的,in1d
的输出可用于索引foo:
foo[np.in1d(foo[:,0], [12, 1, 2])]
或
foo[~np.in1d(foo[:,0], [12, 1, 2])]
注意:in1d
仅适用于numpy 1.4或更高版本。