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



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

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

--编辑:

您可以假设您永远不会获得数组中的值,我为此进行了预过滤

一种直接的方法将是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 的排序性质。这将对应于下限指数。因此,使用两个边界值的 indexindex+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)

你可以做这样的事情:

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)

最新更新