Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试numpy数组中的每个元素是否位于两个值之间的简单方法?_Python_Numpy - Fatal编程技术网

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

Python 测试numpy数组中的每个元素是否位于两个值之间的简单方法?,python,numpy,Python,Numpy,我想知道是否有一种语法上简单的方法来检查numpy数组中的每个元素是否位于两个数字之间 换句话说,正如numpy.array([1,2,3,4,5])

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

换句话说,正如
numpy.array([1,2,3,4,5])<5
将返回
array([True,True,True,False])
,我想知道是否可以执行类似的操作:

1

。。。获得

数组([False,True,True,True,False])

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

有什么建议吗?

一个解决方案是:

import numpy as np
a = np.array([1, 2, 3, 4, 5])
(a > 1).all() and (a < 5).all()
# False
将numpy导入为np
a=np.array([1,2,3,4,5])
(a>1.all)和(a<5.all)
#假的
如果需要真值数组,请使用:

(a > 1) & (a < 5)
# array([False,  True,  True,  True, False])
(a>1)和(a<5)
#数组([False,True,True,True,False])

另一种方法是使用
numpy。任何
,下面是一个示例

import numpy as np
a = np.array([1,2,3,4,5])
np.any((a < 1)|(a > 5 ))
将numpy导入为np
a=np.数组([1,2,3,4,5])
np.任何((a<1)|(a>5))

您也可以将矩阵居中,并将距离设置为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)
上限=5
下限=1
a=np.数组([1,2,3,4,5])

您的_mask=np.abs(a-0.5*(上限+下限))在多维数组中,您可以使用
np.any()
选项或比较运算符,同时使用
&
将引发错误

使用比较运算符的示例(在多维阵列上) 现在,如果要检查数组值是否在某个范围内,即a,请使用
==
=如果要检查数组值是否超出范围,即arrB:

(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]])
(arr3)
>数组([[False,True,False],
[对,错,对],
[真的,真的,真的],
[假,假,假]]
(arr>1)==(arr数组([[False,False,False],
[假,假,假],
[假,假,假],
[对,对,对]]

这只是返回
False
并且没有给每个元素一个布尔值。我想这就是你想要的,检查数组中的每个元素是否在两个数字之间……好的,我正在编辑……没有不愉快的感觉=)这一定是我不想尝试的事情。多谢!对于较大的阵列,此方法的效率如何?看起来您正在用python运行测试,这可能会大大降低测试速度。在纯numpy中有没有办法做到这一点。你说的“纯numpy”是什么意思?numpy覆盖所有运算符(
\uugt\uuuuu
),

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