首页 > 解决方案 > Numpy 布尔索引以匹配多个值

问题描述

我正在尝试在 numpy 中使用布尔索引来创建一个布尔数组,该数组对应于数组中某些值的存在。

我所做的明显尝试是:

x = np.array([1, 2, 3, 2, 5, 3, 1, 2, 3, 4, 5])

xBool = x == 2
xBool2 = x == 3
xBool3 = x == 5

x[xBool] = 0
x[xBool2] = 0
x[xBool3] = 0

print(x)

- 输出 -

>>> 
[1 0 0 0 0 0 1 0 0 4 0]

这就是我想要的,但正如您从代码中看到的那样,每个匹配项都需要单独的行。对于 3 次以上的比较,这可能会变得很长。

然后我尝试了以下方法:

y = np.array([1, 2, 3, 2, 5, 3, 1, 2, 3, 4, 5])

yBool = y in (2, 3, 5)

y[yBool] = 0

print(y)

但是我收到一条错误消息:

ValueError: The truth value of an array with more than one element is ambiguous.

Use a.any() or a.all()

我不确定如何快速进行多重比较,而不是使用单独的布尔数组。有一种OR我可以用于布尔索引的方法吗?

标签: pythonnumpy

解决方案


推荐阅读