Эквивалент 'in' для сравнения двух массивов Numpy - PullRequest
3 голосов
/ 30 ноября 2010

В чистом, невекторизованном Python, который я могу использовать,

>>> a = 9
>>> b = [5, 7, 12]
>>> a in b
False

Я бы хотел сделать что-то похожее для массивов в Numpy, т.е.

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b = np.array([5, 7, 12])
>>> a in b
np.array([False, False, False, False, True, False, True, False, False, False])

... хотя это не работает.

Есть ли функция или метод, который достигает этого? Если нет, то какой самый простой способ сделать это?

Ответы [ 3 ]

8 голосов
/ 30 ноября 2010

Вы ищете in1d :

>>> import numpy as np
>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b = np.array([5, 7, 12])
>>> np.in1d( a, b)
array([False, False, False, False,  True, False,  True, False, False, False], dtype=bool)
1 голос
/ 30 ноября 2010

Вы сравниваете две очень разные вещи. С чистыми списками Python у вас есть int и список. С NumPy, у вас есть два NumPy массивов. Если вы измените a на int, то оно будет работать как положено в numpy.

>>> a = 9
>>> b = np.array([5, 7, 12])
>>> a in b
False

Также обратите внимание, что то, что вы показываете с двумя списками, является довольно интуитивным результатом Возвращенный массив показывает вам, для каждого значения в массиве a, это в b? 5 и 7 есть, остальные нет. Отсюда и данный результат.

0 голосов
/ 30 ноября 2010

Возможно, вы захотите реализовать какой-либо алгоритм поиска строк, если собираетесь проверить, содержит ли одна последовательность другую последовательность. Ссылка из Википедии

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