我有一个值,比如 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]
Run Code Online (Sandbox Code Playgroud)
解释
输入是 -
In [27]: A
Out[27]: [2005, 2010, 2015, 2020, 2025, 2030]
In [28]: B
Out[28]: 2015
Run Code Online (Sandbox Code Playgroud)
找到 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)
Run Code Online (Sandbox Code Playgroud)