使用 numpy.where() 将数组中的数字与区间进行比较

Using numpy.where() to compare numbers in an array to an interval

我有一个数字数组:

my_arr = np.array([n, n+1, n+2 ... , m-1, m]

我想创建一个布尔数组,它指示哪些数字在某个(闭合的)区间内,[A,B],以对具有相同形状的其他相关数组进行操作。有两种情况:

案例 1:B >= mA <= n

这个案例很简单;仅用一个布尔表达式就可以完整描述间隔,np.where() 提供了测试我的数组的解决方案;例如:

my_boolean_arr = np.where(my_arr >= A)

或 B 的等价物。有效。

案例 2:n <= Am >= B

到这里,我运行陷入了困境。我无法再将区间表达式缩减为“单个”布尔表达式。 Python 允许我来 close:表达式 A < x < B 将 return 一个单一的(正确的)布尔值。然而,

my_boolean_arr = np.where(A <= my_arr <= B)

现在失败了:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

那么,两个问题。首先,我如何使这项工作?二、为什么会失败?

没有为 numpy 数组定义运算符“and”和“or”。 在您的情况下,您可以改用 np.logical_and:

my_boolean_arr = np.logical_and(my_arr>=A, my_arr<=B)

https://numpy.org/doc/stable/reference/generated/numpy.logical_and.html

另一种方法是使用运算符 &

my_boolean_arr = (my_arr>=A) & (my_arr<=B)