测试numpy数组中的每个元素是否位于两个值之间的简单方法?

时间:2012-05-10 21:13:50

标签: python numpy

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

换句话说,正如numpy.array([1,2,3,4,5]) < 5将返回array([True, True, True, True, False])一样,我想知道是否可以做类似于此的事情:

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

......获得......

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

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

任何提示?

4 个答案:

答案 0 :(得分:52)

一个解决方案是:

a = numpy.array([1,2,3,4,5])
(a > 1).all() and (a < 5).all()

如果你想要实际的真值数组,只需使用:

(a > 1) & (a < 5)

答案 1 :(得分:0)

另一种方法是使用numpy.any,这是一个示例

import numpy as np
a = np.array([1,2,3,4,5])
np.any((a < 1)|(a > 5 ))

答案 2 :(得分: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<51<=x<=5,但不能执行1<=x<5

答案 3 :(得分:0)

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

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

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