найти индекс массива, ближайший элемент которого больше значения - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть отсортированный массив.

x = [1, 10, 12, 16, 19, 20, 21, ....]

для любого заданного числа y, которое находится между [x[0], x[-1]], я хочу найти индекс элемента, который ближе всего больше y, например, если y = 0 , возвращает 0, если y = 18, возвращает 4

Доступна ли функция?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2020

Без какой-либо внешней библиотеки вы можете использовать bisect

i = bisect.bisect_right(x, y)

i будет индексом элемента, который вы хотели.

2 голосов
/ 20 апреля 2020

Учитывая отсортированный характер, мы можем использовать np.searchsorted -

idx = np.searchsorted(x,y,'right')
1 голос
/ 20 апреля 2020

Вы можете использовать numpy .argmin на абсолютном значении разницы:

import numpy as np
x = np.array([1, 10, 12, 16, 19, 20, 21])

def find_closest(x,y):
    return (np.abs(x-y)).argmin()

for y in [0,18]:
    print(find_closest(x,y))

0
4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...