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 是純量,則為整數。

參見

sort

傳回陣列的已排序副本。

histogram

從一維資料產生直方圖。

註解

二元搜尋用於尋找所需的插入點。

從 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.