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

如何用Numpy高效实现数组值的索引映射?

高效实现NumPy数组映射的最优方案

对于用小型映射数组tbl转换百万级大型数组arr的场景,NumPy原生的矢量化索引访问就是最直接、性能最优的解决方案,完全不需要依赖Python列表推导式。

实现代码

直接通过tbl[arr]就能完成映射,代码简洁且高效:

import numpy as np

arr = np.array([0, 1, 2, 3, 0, 4, 3, 3, 1, 4, 0, 0, 0, 2])
tbl = np.array([0, 1, 1, 0, 2])
res = tbl[arr]

print(arr)  # [0 1 2 3 0 4 3 3 1 4 0 0 0 2]
print(tbl)  # [0 1 1 0 2]
print(res)  # [0 1 1 0 0 2 0 0 1 2 0 0 0 1]

性能优势说明

  • 这是NumPy底层实现的矢量化操作,全程在C语言层面执行,彻底避开了列表推导式中逐个元素遍历的Python解释器开销。对于百万级别的arr,性能提升会非常显著。
  • 哪怕tbl只有几十个元素,这种索引方式的时间复杂度依然是O(n)(n为arr的长度),且常数项远低于Python循环。

性能对比测试(可选)

如果想直观看到差距,可以用大数组做个测试:

import time

# 生成百万级测试数组
arr_large = np.random.randint(0, len(tbl), size=1_000_000)

# 测试列表推导式
start = time.time()
_ = np.array([tbl[x] for x in arr_large])
print(f"列表推导式耗时: {time.time() - start:.4f}秒")

# 测试NumPy矢量化索引
start = time.time()
_ = tbl[arr_large]
print(f"NumPy矢量化索引耗时: {time.time() - start:.4f}秒")

实际运行后你会发现,NumPy的方式耗时通常只有列表推导式的几十分之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:38:25