Пакет numpy_indexed (отказ от ответственности: я его автор) содержит функцию, которая делает именно это:
import numpy_indexed as npi
indices = npi.indices(x, y, missing='mask')
В настоящее время он вызывает KeyError, если не все элементы в y присутствуют в x; но, возможно, мне стоит добавить kwarg, чтобы можно было пометить такие предметы -1 или чем-то еще.
Он должен иметь ту же эффективность, что и принятый в настоящее время ответ, поскольку реализация осуществляется аналогичным образом. Однако numpy_indexed более гибок и позволяет искать, например, индексы строк многомерных массивов.
РЕДАКТИРОВАТЬ: я изменил обработку пропущенных значений; «отсутствующий» kwarg теперь может быть установлен с помощью «поднимать», «игнорировать» или «маскировать». В последнем случае вы получите маскированный массив той же длины y, для которого вы можете вызвать .compressed (), чтобы получить действительные индексы. Обратите внимание, что есть также npi.contains (x, y), если это все, что вам нужно знать.