查找绑定输入值的numpy数组值

时间:2016-06-14 23:58:22

标签: python numpy

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

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

- 编辑:

你可以假设你永远不会得到数组中的值,我预先过滤了

2 个答案:

答案 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维护排序的性质。这将对应于下限索引。因此,使用Aindexindex+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)