python - 确定数组 B 的每个元素在另一个数组 A 中的位置

标签 python arrays numpy indexing

给定两个列表:

In [518]: A
Out[518]: [3, 4, 2, 1, 7, 6, 5]

In [519]: B
Out[519]: [4, 6]

B 中的每个元素都存在于 A 中,无一异常(exception)。

我想检索 A 中所示的 B 的索引数组。例如,4 出现在 A 中的索引 1 中,而 6 出现在 B 的位置 5 中。对于这种情况,我的预期输出是 [1, 5]

这就是我为获取索引所做的事情:

In [520]: np.flatnonzero(np.in1d(a, b))
Out[520]: array([1, 5])

不幸的是,这在大多数其他情况下不起作用。例如,如果 B = [6, 4],我的方法在应该输出 [5, 1] 时仍然输出 [1, 5] >。

有没有一种有效的 numpy 方法来实现我想要实现的目标?

最佳答案

IIUC:

In [71]: a
Out[71]: array([3, 4, 2, 1, 7, 6, 5, 6, 4])

In [72]: b
Out[72]: array([4, 6])

In [73]: np.where(a==b[:,None])[1]
Out[73]: array([1, 8, 5, 7], dtype=int64)

In [74]: b = np.array([6, 4])

In [75]: np.where(a==b[:,None])[1]
Out[75]: array([5, 7, 1, 8], dtype=int64)

更新:如果您只需要第一次出现的索引(以防A数组中存在重复项),则使用this solution from @Divakar ,这会更快:

In [84]: (a==b[:,None]).argmax(1)
Out[84]: array([5, 1], dtype=int64)

关于python - 确定数组 B 的每个元素在另一个数组 A 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862256/

相关文章:

python - 在 AWS Elastic Beanstalk 上创建 Django super 用户

C++数组问题

javascript - 多选输入 - 查找添加和删除项目 Javascript

python - 格式化数据的快速查询

python - 过滤掉所有行中具有相同值的列

python - 如何将2个字符串转换为Python列表?

ruby-on-rails - 将数组数组转换为字符串数组

python - 复制列表或 Numpy 数组中的特定元素

python - 加速 numpy 嵌套循环

python - 自动按键以保持登录状态