使用 numpy 在第一个矩阵列中搜索数组并获取下一列值

Search an array in first matrix column with numpy and get next column values

有以下数组(我理解第一个是矩阵)

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'])

我能够找到与 "ids" 中的行匹配的 "heroes" 值,但我只能打印像

这样的匹配项
 print(ids[np.where(ids==(np.row_stack(heroes)))])

输出

['Spiderman' 'Scarlet Spider']

是否(以及如何)像这样打印它们?

['Peter Parker' 'Ben Reilly']

注意 这是一个给定的练习,我不期望其他要求,例如 heroes 数组中的元素数量与 ids 数组中的行数不同(这会破坏我当前的代码,因为使用 row_stack).

但我注意到我的 where 不会在 ids 数组中找到重复的值(就像我有 2 个 "Spiderman" 具有差异名称并且两个名称都出现在 heroes array), 随意扩展到这个,但主要问题是我刚刚写的没有其他给定限制的内容。

您可以使用 np.argwhere 和索引来获取名称。内部 [:,0] 为您提供包含名称的两个子数组,外部 [:,0] 为您提供每个子数组的第一个元素(名称)。

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