Python 检查给定值是否在给定数组中的任何数字之间

Python 检查给定值是否在给定数组中的任何数字之间,python,numpy,Python,Numpy,考虑给定的数组: 将numpy作为np导入 borders=np.数组[[784810705], [10861, 13559], [13747, 16319], [16792, 19427], [19963, 22535]] 如何检查给定值是否在这些间隔之间 我定义了一个自定义函数,如: 定义-如果值与arr之间: 对于arr中的边界: 如果边框[0]如果不需要知道元素所在的索引,则可以将循环矢量化为: 将numpy作为np导入 定义-如果值与arr之间: 返回np.any np.logical

考虑给定的数组:

将numpy作为np导入 borders=np.数组[[784810705], [10861, 13559], [13747, 16319], [16792, 19427], [19963, 22535]] 如何检查给定值是否在这些间隔之间

我定义了一个自定义函数,如:

定义-如果值与arr之间: 对于arr中的边界:
如果边框[0]如果不需要知道元素所在的索引,则可以将循环矢量化为:

将numpy作为np导入 定义-如果值与arr之间:
返回np.any np.logical_and borders[:,0]如果不需要知道元素在哪个索引中,可以将循环矢量化为:

将numpy作为np导入 定义-如果值与arr之间:
返回np.any np.logical_和borders[:,0]这里有一个小小的改进:

def _if_between(value, arr):
        if any([borders[0] <= value <= borders[1] for borders in arr]):
            return True
        return False

这里有一个小小的改进:

def _if_between(value, arr):
        if any([borders[0] <= value <= borders[1] for borders in arr]):
            return True
        return False

在纯Python上执行此操作更好。 但是您可以比简单的循环更快地编写代码

value = 10869
[True if border[0] <= value <= border[1] else False for border in borders]

在纯Python上执行此操作更好。 但是您可以比简单的循环更快地编写代码

value = 10869
[True if border[0] <= value <= border[1] else False for border in borders]

您可以通过以下简单方法进行检查:

定义-如果值与arr之间: 对于arr中的边界: 返回rangeborders[0],borders[1]中的值
您可以通过以下简单方法进行检查:

定义-如果值与arr之间: 对于arr中的边界: 返回rangeborders[0],borders[1]中的值
使用纯Python而不使用任何模块,并使用任何加号列表:

假设边界是一对数组 定义-如果值、边界之间: 返回任意[min=最小值,边界中的最大值]
使用纯Python而不使用任何模块,并使用任何加号列表:

假设边界是一对数组 定义-如果值、边界之间: 返回任意[min=最小值,边界中的最大值] Pandas 1.0.3有一个类型,该类型有一个contains方法来检查数组中的任何间隔中是否存在一个数字:

import pandas as pd

borders = [
    [ 7848, 10705],
    [10861, 13559],
    [13747, 16319],
    [16792, 19427],
    [19963, 22535]
]
intervals = pd.arrays.IntervalArray.from_tuples(borders)
result = intervals.contains(19426)
结果变量如下所示:

array([False, False, False,  True, False])
Pandas 1.0.3有一个类型,该类型有一个contains方法来检查数组中的任何间隔中是否存在一个数字:

import pandas as pd

borders = [
    [ 7848, 10705],
    [10861, 13559],
    [13747, 16319],
    [16792, 19427],
    [19963, 22535]
]
intervals = pd.arrays.IntervalArray.from_tuples(borders)
result = intervals.contains(19426)
结果变量如下所示:

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

你是说borders[0]@emremrah是的,很抱歉。编辑了我的答案。你的意思是borders[0]@emremrah是的,很抱歉。编辑了我的答案。它将返回一个布尔值列表。它可以与任何[True if border[0]一起使用。与简单循环相比,您的代码的速度意味着什么?它将返回布尔值列表。它可以与任何[True if border[0]一起使用什么能让你的代码比一个简单的循环更快?arr中的边框可以是左边框,右边框可以通过使用直接名称而不是列表索引来提高速度约10%。所有答案都是合法的,我无法决定接受哪一个,该死…对所有答案运行timeit,然后找到哪一个最好:导入timeit;timeit.timeit\u如果介于两者之间n6000,borders,globals=globals还检查内存占用。arr中的边框可以是左边框,右边框,通过使用直接名称而不是列表索引来提高速度约10%。所有答案都是合法的,我无法决定接受哪一个,该死的…在所有答案上运行timeit,并找到哪一个是最好的:导入timeit;timeit.timeit\u如果打赌ween6000,borders,globals=全局还检查内存占用。