65

我想知道是否有一种语法上简单的方法来检查 numpy 数组中的每个元素是否位于两个数字之间。

换句话说,就像numpy.array([1,2,3,4,5]) < 5return一样array([True, True, True, True, False]),我想知道是否有可能做类似这样的事情:

1 < numpy.array([1,2,3,4,5]) < 5

……获得……

array([False, True, True, True, False])

我知道我可以通过布尔测试的逻辑链接来获得这一点,但是我正在处理一些相当复杂的代码,并且我正在寻找一个语法上干净的解决方案。

有小费吗?

4

4 回答 4

97

一种解决方案是:

import numpy as np
a = np.array([1, 2, 3, 4, 5])
(a > 1) & (a < 5)
# array([False,  True,  True,  True, False])
于 2012-05-10T21:23:11.607 回答
9

另一种是使用numpy.any,这是一个例子

import numpy as np
a = np.array([1,2,3,4,5])
np.any((a < 1)|(a > 5 ))
于 2019-04-04T19:03:08.717 回答
0

您还可以将矩阵居中并使用距离为 0

upper_limit = 5
lower_limit = 1
a = np.array([1,2,3,4,5])
your_mask = np.abs(a- 0.5*(upper_limit+lower_limit))<0.5*(upper_limit-lower_limit)

要记住的一件事是比较在两边都是对称的,所以它可以做1<x<5or 1<=x<=5,但不能1<=x<5

于 2019-08-27T08:14:08.393 回答
0

在多维数组中,您可以使用np.any()选项建议或比较运算符,而使用&andand会引发错误。

使用比较运算符的示例(在多维数组上)

import numpy as np

arr = np.array([[1,5,1],
                [0,1,0],
                [0,0,0],
                [2,2,2]])

现在使用==如果您想检查数组值是否在范围内,即 A < arr < B,或者!=如果您想检查数组值是否在范围外,即 arr < A 和 arr > B:

(arr<1) != (arr>3)
> array([[False,  True, False],
         [ True, False,  True],
         [ True,  True,  True],
         [False, False, False]])

(arr>1) == (arr<4)
> array([[False, False, False],
         [False, False, False],
         [False, False, False],
         [ True,  True,  True]])
于 2021-01-06T22:16:33.023 回答