Найти несколько значений в массиве Numpy
Я ищу функцию numpy, чтобы найти индексы, в которых определенные значения находятся внутри вектора (xs). Значения указаны в другом массиве (ys). Возвращенные индексы должны следовать порядку ys.
В коде, я хочу заменить понимание списка ниже функцией numpy.
>> import numpy as np
>> xs = np.asarray([45, 67, 32, 52, 94, 64, 21])
>> ys = np.asarray([67, 94])
>> ndx = np.asarray([np.nonzero(xs == y)[0][0] for y in ys]) # <---- This line
>> print(ndx)
[1 4]
Есть ли быстрый способ?
Спасибо
Ответы
Ответ 1
Для больших массивов xs
и ys
вам нужно будет изменить базовый подход, чтобы это стало быстрым. Если все в порядке с сортировкой xs
, то простой способ - использовать numpy.searchsorted()
:
xs.sort()
ndx = numpy.searchsorted(xs, ys)
Если важно сохранить исходный порядок xs
, вы также можете использовать этот подход, но вам нужно запомнить исходные индексы:
orig_indices = xs.argsort()
ndx = orig_indices[numpy.searchsorted(xs[orig_indices], ys)]