numpy.searchsorted

numpy.searchsorted(a, v, side='left', sorter=None)

Функция searchsorted() возвращает индексы в которые должны быть вставлены указанные элементы, что бы порядок сортировки был сохранен.

Параметры:
a - массив NumPy или подобный массиву объект.
Одномерный исходный массив. Данный массив может быть и не отсортирован, но индексы возвращаются именно для отсортированной версии.
v - массив NumPy или подобный массиву объект.
Элементы, которые необходимо вставить в массив a.
side - строка {'left', 'right'} (необязательный параметр).
Если 'left' - вернуть индекс для вставки элемента слева, 'right' - вернуть индекс для вставки элемента справа.
sorter - массив NumPy или подобный массиву объект (необязательный параметр).
Массив целочисленных индексов, который сортирует исходный массив a. Такой массив может быть получен с помощью функции argsort.
Возвращает:
ndarray - массив NumPy
массив индексов в которые должны быть вставлены указанные элементы, что бы порядок сортировки был сохранен.
Смотрите так же:
sort, histogram

Замечание

Данная функция обладает эквивалентным методом класса ndarray, т.е. np.searchsorted(a) равносильно вызову метода a.searchsorted():

>>> import numpy as np
>>> 
>>> 
>>> a = np.sort(np.random.randint(0, 100, 10))
>>> a
array([ 4, 10, 12, 14, 16, 16, 59, 72, 78, 86])
>>> 
>>> np.searchsorted(a, 13)
3
>>> 
>>> a.searchsorted(13)
3

Данная функция выполняет предварительную сортировку массива и поддерживает компдексные массивы и массивы с значениями nan. Правила сортировки можете посмотреть в np.sort().



Примеры

Данная функция вернет индекс для отсортированной версии массива, даже если он сам не отсортирован:

>>> import numpy as np
>>> 
>>> a = np.random.randint(1, 11, 7)
>>> a
array([10,  3,  7,  8,  3,  7,  9])
>>> 
>>> np.searchsorted(a, 5)
2
>>> np.insert(np.sort(a), 2, 5)
array([ 3,  3,  5,  7,  7,  8,  9, 10])

Параметр side позволяет определить куда именно должен быть вставлен элемент: слева или справа:

>>> a = np.sort(a)
>>> a
array([ 3,  3,  7,  7,  8,  9, 10])
>>> 
>>> np.searchsorted(a, 5)
2
>>> 
>>> np.searchsorted(a, 5, side = 'right')
2
>>> 
>>> np.searchsorted(a, 7)     #  side = 'left' по умолчанию
2
>>> 
>>> np.searchsorted(a, 7, side = 'right')
4