我想将数组的所有值设置为 0,这些值的值不在不同的数组中。
如果只有一个条件,则很容易:
a = np.array([[1,2],[2,4],[5,6]])
cond = 1
a[a!=cond] = 0
如果我有一个条件列表,例如
cond = np.array([1,2,6])
我可以这样写
a[(a!=1) & (a!=2) & (a!=6)]=0
但我无法弄清楚这样做的一般方法,像这样
a[a!=cond] = 0
当
cond
是一个数组时。我还查看了 np.select
但这似乎并没有满足我的需求。 最佳答案
解决方案的关键是:NOT( option1) & NOT(option2) & NOT(option3)
相当于NOT (option1 | option2 | option3 )
。
现在,为了获得 option1 | option2 | option3
的掩码,我们有一个内置的 np.in1d
。所以,基本上解决方案有点像 ~np.in1d(a,cond)
。由于 np.in1d
适用于一维数组,我们需要在使用输入数组上的掩码将值设置为零之前对其进行整形。
因此,实现看起来像这样 -
a[~np.in1d(a,cond).reshape(a.shape)] = 0
关于python - Numpy 索引 : Set values of an array given by conditions in different array,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39195729/