使用 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 >= m
或 A <= n
这个案例很简单;仅用一个布尔表达式就可以完整描述间隔,np.where()
提供了测试我的数组的解决方案;例如:
my_boolean_arr = np.where(my_arr >= A)
或 B 的等价物。有效。
案例 2:n <= A
和 m >= 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)
我有一个数字数组:
my_arr = np.array([n, n+1, n+2 ... , m-1, m]
我想创建一个布尔数组,它指示哪些数字在某个(闭合的)区间内,[A,B]
,以对具有相同形状的其他相关数组进行操作。有两种情况:
案例 1:B >= m
或 A <= n
这个案例很简单;仅用一个布尔表达式就可以完整描述间隔,np.where()
提供了测试我的数组的解决方案;例如:
my_boolean_arr = np.where(my_arr >= A)
或 B 的等价物。有效。
案例 2:n <= A
和 m >= 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)