Проверить, есть ли группы чисел в массиве Numpy? - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть Numpy массив A:

A = np.array([1,2,3,4,5,6,8,10,12,15,20,100,200,300,500])

И еще один Numpy массив B с парами чисел:

B = np.array([[2000,1000],[5000,10000],[1,1000],[300,700],[500,5],[500,700],[1,5])

Я ищу наиболее эффективный способ чтобы найти индекс первого вхождения пар из B, которые присутствуют в A (если доступно). Порядок чисел в паре не имеет значения. В приведенном выше примере числа пары [500,5] представляют первую пару, найденную в A.

Существует ли какое-либо элегантное решение Numpy без циклического прохождения каждой пары по очереди? Цени любые намеки!

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020

Я бы использовал isin с argmax

np.isin(B,A).all(1).argmax()

Out[931]: 4

B[np.isin(B,A).all(1).argmax()]

Out[932]: array([500,   5])
1 голос
/ 05 февраля 2020

Вы можете получить индексы, используя np.isin и затем учитывая минимальный элемент. Первый элемент результата - это индекс, который удовлетворяет условию.

>>> np.where(np.isin(B,A).min(axis=1)==1)
(array([4, 6]),)
0 голосов
/ 05 февраля 2020

Как насчет этого? Это может быть неэффективно, если вы действительно заботитесь только о первом истинном случае

match_idxs = np.where(np.isin(B[:,0], A) & np.where(np.isin(B[:,1], A))
idx = matches[0] if len(matches) else None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...