Python 使用'的替代方案;在';使用numpy.where()

Python 使用'的替代方案;在';使用numpy.where(),python,numpy,scipy,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的方式是什么 (由于每个月都有不规则

假设我有一个数组'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的方式是什么


(由于每个月都有不规则的测量次数,因此无法重塑阵列)

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

但是为此,numpy在一维中具有函数
)来对numpy数组执行“in”。使用您的代码:

np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True)

用注释完成回答:在这种情况下,如果使用
,其中
是多余的,则可以使用
in1d
的输出为foo编制索引:

foo[np.in1d(foo[:,0], [12, 1, 2])]
还是为了

foo[~np.in1d(foo[:,0], [12, 1, 2])]

注意:
INAD
仅适用于numpy 1.4或更高版本。

是的!我甚至不需要np.where()这个!我可以用np.inad()创建我需要的东西谢谢!实际上,np.in1d的输出可以用来索引foo。