Поиск массива в первом столбце матрицы с помощью numpy и получение значений следующего столбца - PullRequest
1 голос
/ 12 марта 2019

Имея следующие массивы (я понимаю, что первый - это вызов матрицы)

ids = np.array([['Peter Parker','Spiderman'],['Ben Reilly','Scarlet Spider'],['Norman Osborn','Green Goblin'],['Bruce Banner','Hulk']])

И

heroes=np.array(['Spiderman','Scarlet Spider','Capitan America','Iron Man'])

Я могу найти значения "heroes", которые соответствуютстроки в «идентификаторах», но я могу печатать только совпадения, например

 print(ids[np.where(ids==(np.row_stack(heroes)))])

Какие выходные данные

['Spiderman' 'Scarlet Spider']

Можно ли (и как) их напечатать как?

['Peter Parker' 'Ben Reilly']

note Это задание, я не ожидаю других требований, таких как количество элементов в массиве heroes diff из числа строк в массиве ids (этосломал бы мой текущий код из-за использования row_stack).

Но я заметил, что мой where не найдет дублированные значения в массиве ids (например, если у меня есть 2 "Spiderman" симя diff и оба имени появляются в массиве heroes), не стесняйтесь распространяться на это, но основной вопрос заключается в том, что я только что написал без каких-либо других ограничений.

1 Ответ

2 голосов
/ 12 марта 2019

Вы можете использовать np.argwhere и индексирование, чтобы получить имена.Внутренний [:,0] дает вам два подмассива, содержащие имена, а внешний [:,0] дает вам первый элемент (имя) из каждого из подмассивов.

ids[np.argwhere(ids==(np.row_stack(heroes)))[:,0]][:, 0]
# array(['Peter Parker', 'Ben Reilly'])
...