具有以下数组(我知道第一个数组称为矩阵)
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
在heroes
数组中找不到重复的值(例如,如果我有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;
数组中),您可以随意扩展,但主要的问题是我在没有其他限制的情况下写的内容。
答案 0 :(得分:2)
您可以使用np.argwhere
和索引来获取名称。内部[:,0]
为您提供了两个包含名称的子数组,外部[:,0]
为您提供了每个子数组中的第一个元素(名称)。
ids[np.argwhere(ids==(np.row_stack(heroes)))[:,0]][:, 0]
# array(['Peter Parker', 'Ben Reilly'])