Python 查找绑定输入值的numpy数组值
我有一个值,比如2016和一个排序的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,
[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)