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

Numpy:如何高效将数组A元素替换为数组B匹配元素的索引

Numpy大数组元素替换为对应唯一值索引的高效实现

场景说明

你需要将数组A中的每个元素替换为其在唯一值数组B中的对应索引,针对A长度1800万、B长度13.8万的大数据量场景,推荐以下纯Numpy的高效实现,所有方案均为C级别的运算效率,避免Python层循环的性能损耗。

方案1:未生成B时的最优解

如果你还没有预先计算出唯一值数组B,直接通过np.unique的return_inverse参数一步得到结果,这是性能最高的方案:

import numpy as np

# A为原始输入数组
B, C = np.unique(A, return_inverse=True)

该方案内部已完成去重和索引映射的全流程优化,1800万长度的数组通常可在2秒内完成运算。

方案2:已有排序后的B

如果你已经预先得到了排序后的B(np.unique默认返回的B就是升序排列的),直接使用np.searchsorted实现映射:

C = np.searchsorted(B, A)

该方案时间复杂度为O(len(A) * log(len(B))),针对你的数据规模,运算耗时和方案1接近。

方案3:已有未排序的B

如果你的B不是升序排列,通过排序索引适配searchsorted即可:

# 先得到B的排序索引
b_sorter = np.argsort(B)
# 映射得到C
C = b_sorter[np.searchsorted(B, A, sorter=b_sorter)]

该方案仅比前两种多一次13.8万长度数组的排序开销,几乎可忽略不计。

禁止使用的低效率方案

不要使用Python层的字典遍历、列表推导式等实现,这类方案在千万级数据规模下耗时会达到几十秒甚至数分钟,完全不满足性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:09:03