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

时间:2019-03-12 01:48:48

标签: python python-3.x numpy numpy-ndarray

具有以下数组(我知道第一个数组称为矩阵)

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的使用。

但是我注意到我的idsheroes数组中找不到重复的值(例如,如果我有2个带有差异名称的“ Spiderman”,并且两个名称都出现在SELECT S.SUPPLIER_NAME,P.PRODUCT_NAME,O.ORDER_ID,O.QUANTITY FROM SUPPLIERS AS S INNER JOIN PRODUCT AS P ON S.PRODUCT_ID = P.PRODUCT_ID INNER JOIN ORDERS AS O ON P.PRODUCT_ID = O.ORDER_ID; 数组中),您可以随意扩展,但主要的问题是我在没有其他限制的情况下写的内容。

1 个答案:

答案 0 :(得分:2)

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

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