我想将数组的所有值设置为 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/

10-12 13:26