numpy.searchsorted#
- numpy.searchsorted(a, v, side='left', sorter=None)[原始碼]#
尋找應插入元素以維持順序的索引。
尋找已排序陣列 a 的索引,使得如果將 v 中對應的元素插入到這些索引之前,a 的順序將被保留。
假設 a 已排序
side (方位)
傳回的索引 i 滿足
left (左)
a[i-1] < v <= a[i]
right (右)
a[i-1] <= v < a[i]
- 參數:
- a類陣列 (array_like),一維
輸入陣列。如果 sorter 為 None,則必須以升序排序,否則 sorter 必須是索引陣列,用於對其進行排序。
- v類陣列 (array_like)
要插入到 a 的值。
- side{‘left’, ‘right’}, 可選
如果為 ‘left’,則給出找到的第一個合適位置的索引。如果為 ‘right’,則傳回最後一個此類索引。如果沒有合適的索引,則傳回 0 或 N (其中 N 是 a 的長度)。
- sorter類陣列 (array_like),一維,可選
整數索引的可選陣列,用於將陣列 a 排序為升序。它們通常是 argsort 的結果。
- 傳回值:
- indices整數或整數陣列
插入點陣列,形狀與 v 相同;如果 v 是純量,則為整數。
註解
二元搜尋用於尋找所需的插入點。
從 NumPy 1.4.0 開始,
searchsorted
可以處理包含nan
值的實數/複數陣列。增強的排序順序記錄在sort
中。此函數使用與 Python 內建函數
bisect.bisect_left
(side='left'
) 和bisect.bisect_right
(side='right'
) 相同的演算法,它也在 v 參數中向量化。範例
>>> import numpy as np >>> np.searchsorted([11,12,13,14,15], 13) 2 >>> np.searchsorted([11,12,13,14,15], 13, side='right') 3 >>> np.searchsorted([11,12,13,14,15], [-10, 20, 12, 13]) array([0, 5, 1, 2])
當使用 sorter 時,傳回的索引指的是 a 的已排序陣列,而不是 a 本身
>>> a = np.array([40, 10, 20, 30]) >>> sorter = np.argsort(a) >>> sorter array([1, 2, 3, 0]) # Indices that would sort the array 'a' >>> result = np.searchsorted(a, 25, sorter=sorter) >>> result 2 >>> a[sorter[result]] 30 # The element at index 2 of the sorted array is 30.