我有一个值,比如2016和一个有序的numpy数组:[2005, 2010, 2015, 2020, 2025, 2030]
。什么是pythonic方法来查找绑定2016年的数组中的2个值。在这种情况下,答案将是一个数组[2015,2020]。
不知道除了循环之外该怎么做,但希望有更多基于numpy的解决方案
- 编辑:
你可以假设你永远不会得到数组中的值,我预先过滤了
答案 0 :(得分:4)
直接的方法是使用np.searchsorted
-
idx = np.searchsorted(A,B,'left')
out = A[idx],A[idx+1]
<强>解释强>
输入是 -
In [27]: A
Out[27]: [2005, 2010, 2015, 2020, 2025, 2030]
In [28]: B
Out[28]: 2015
找到B应该位于A中的索引,以使用searchsorted
维护排序的性质。这将对应于下限索引。因此,使用A
和index
为index+1
索引两个边界值 -
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)
答案 1 :(得分:3)
你可以这样做:
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)