2012-03-05 4 views
14

Я ищу функцию numpy, чтобы найти индексы, в которых определенные значения находятся внутри вектора (xs). Значения указаны в другом массиве (ys). Возвращенные индексы должны соответствовать порядку ys.Найти несколько значений в массиве Numpy

В коде, я хочу заменить нижеследующее значение списка функцией 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] 

Есть ли быстрый способ?

Благодаря

+0

Будете ли вы слишком долго? – kennytm

ответ

21

Для больших массивов 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)] 
+1

, если вам не нужно отслеживать, какие элементы находили, а какие нет, вы можете отфильтровать вывод, чтобы избавиться от всех индексов за пределы: ndx = [e for e in np.searchsorted (xs, ys) если e Picarus

Смежные вопросы