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



我有一个数字数组:

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将返回一个(正确的)布尔值。然而,

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()

那么,两个问题。首先,我该怎么做?第二,为什么这种做法会失败?

操作符"and"one_answers";or"没有为numpy数组定义。在你的例子中,你可以用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)

最新更新