Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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,我有一个值,比如2016和一个排序的numpy数组:[2005、2010、2015、2020、2025、2030]。在绑定2016的数组中查找2个值的python方法是什么。在这种情况下,答案将是一个数组[2015,2020] 除了循环,我不知道该怎么做,但希望有一个更基于numpy的解决方案 --编辑: 您可以假设永远不会得到数组中的值,我会对该值进行预筛选,您可以这样做: In[1]: import numpy as np In[2]: x = np.array([2005, 2010,

我有一个值,比如2016和一个排序的numpy数组:
[2005、2010、2015、2020、2025、2030]
。在绑定2016的数组中查找2个值的python方法是什么。在这种情况下,答案将是一个数组[2015,2020]

除了循环,我不知道该怎么做,但希望有一个更基于numpy的解决方案

--编辑:


您可以假设永远不会得到数组中的值,我会对该值进行预筛选,您可以这样做:

In[1]: import numpy as np

In[2]: x = np.array([2005, 2010, 2015, 2020, 2025, 2030])

In[3]: x
Out[3]: array([2005, 2010, 2015, 2020, 2025, 2030])


In[4]: x[x > 2016].min()
Out[4]: 2020


In[5]: x[x < 2016].max()
Out[5]: 2015

In[6]: def bound(value, arr):
           return arr[arr < value].max(), arr[arr > value].min()

In[7]: bound(2016, x)
Out[7]: (2015, 2020)
[1]中的
:将numpy作为np导入
[2]中的x=np.array([2005,2010,2015,2020,2025,2030])
在[3]:x中
Out[3]:数组([2005,2010,2015,2020,2025,2030])
[4]:x[x>2016].min()
出[4]:2020年
[5]中:x[x<2016].max()
出[5]:2015年
[6]中:定义绑定(值,arr):
返回arr[arrvalue].min()
[7]中:绑定(2016,x)
Out[7]:(2015、2020)

直接的方法是-

解释

输入是-

In [27]: A
Out[27]: [2005, 2010, 2015, 2020, 2025, 2030]

In [28]: B
Out[28]: 2015
使用
searchsorted
查找B应位于A中的索引,以保持排序性质。这将对应于下限指数。因此,使用两个边界值的
index
index+1
索引到
A
-

In [29]: idx = np.searchsorted(A,B,'left')

In [30]: idx
Out[30]: 2

In [31]: A[idx],A[idx+1]
Out[31]: (2015, 2020)

数组在启动时是否已知已排序,或者是否可以按随机顺序排序?您的示例显示了一个已排序的数组。是的,可以假定该数组已排序如果数组相同但值为2015,正确答案是什么?是[2010年,2020年],还是[2015年,2020年],还是[2010年,2015年],甚至只是[2015年,2015年]?你可以假设你永远不会得到数组中的值,我会对此进行预筛选。感谢您的提问,将更新问题以反映此问题。此解决方案是对数的(而其他解决方案需要线性时间),应该是可接受的答案。
In [29]: idx = np.searchsorted(A,B,'left')

In [30]: idx
Out[30]: 2

In [31]: A[idx],A[idx+1]
Out[31]: (2015, 2020)