我想知道是否有一种语法上简单的方法来检查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])
我知道我可以通过布尔测试的逻辑链接来获得这个,但我正在研究一些相当复杂的代码,我正在寻找一种语法上干净的解决方案。
任何提示?
答案 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<5
或1<=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]])