使用numpy.where()中的'in'的替代方法

时间:2011-09-11 18:49:18

标签: python numpy scipy

假设我有一个数组,'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方式?

(重塑阵列是不可能的,因为每个月都有不规则的测量数量)

1 个答案:

答案 0 :(得分:4)

我认为'in(12,1,2)'不起作用的原因是'in'之前的元素必须是单个元素。

但是为此,numpy有一个函数in1ddocumentation)用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或更高版本。