You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找重排后Numpy数组元素的原始索引

高效实现Numpy数组元素的原始索引追踪

给定两个形状相同的Numpy数组,需要追踪第一个数组的元素在第二个数组中的位置变化——具体来说,要为第二个数组中的每个元素找到它在第一个数组中的原始索引,数组本身是未排序的。

示例1:元素全部存在

a1 = np.array([1, 2, 3, 4])  # 原始数组
a2 = np.array([2, 1, 3, 4])  # 新数组

# 预期结果: [1, 0, 2, 3]
# 解释:
# - 2 原本在索引1的位置
# - 1 原本在索引0的位置
# - 3 原本在索引2的位置
# - 4 原本在索引3的位置

示例2:包含新增元素

a1 = np.array([1, 2, 3, 4])
a2 = np.array([2, 1, 33, 4])

# 预期结果: [1, 0, -1, 3]
# 说明:值33不在原始数组中,对应索引设为-1

我目前用的两种方案:

  • 列表推导式方案:
[a1.tolist().index(v) if v in a1 else -1 for v in a2]
  • Numpy广播匹配方案:
np.where(a2[:, None] == a1)[1]

但第二种方法在示例2的场景下无法正常工作,因为当a2中存在a1没有的元素时,返回的索引长度会和a2的长度不一致,无法得到正确结果。

实际场景中我的数组是百万级行数,列数较少(少于10列),想知道有没有更高效的实现方式?

内容的提问来源于stack exchange,提问作者Aenaon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:12:05