使用 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'])
有以下数组(我理解第一个是矩阵)
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'])