Python如何高效实现二维数组按索引映射替换一维数组值
大规模二维数组按索引映射的高效实现方案
针对你需要把二维数组A的每个元素作为索引,从一维数组B取值生成新二维数组C的需求,按效率优先级给出以下可直接落地的方案:
最高效方案:NumPy向量化索引(大规模数据首选)
当A的规模非常大时,NumPy底层C实现的向量化索引是性能最优的选择,完全没有Python层循环的性能开销,千万级元素规模也能在毫秒级完成计算。
- 首先安装NumPy(已安装可跳过):
pip install numpy - 实现代码:
import numpy as np # 输入数据 A = [[1, 1], [2, 3]] B = [0.1, 0.2, 0.8, 0.9] # 批量索引映射,核心逻辑仅1行 C = np.array(B)[np.array(A)].tolist() print(C) # 输出 [[0.2, 0.2], [0.8, 0.9]],完全匹配预期结果
注意:使用前请确认
A内所有元素的取值都在B的合法索引范围内(即大于等于0,且小于B的长度),避免触发索引越界错误。
无依赖纯Python方案
如果运行环境无法安装NumPy,可以用双层列表推导实现,比显式写嵌套for循环+append的写法性能高30%左右:
A = [[1, 1], [2, 3]] B = [0.1, 0.2, 0.8, 0.9] C = [[B[idx] for idx in row] for row in A]
该方案仅适合十万级元素以内的小规模场景,数据量较大时性能和NumPy方案会有数十到上百倍的差距。
内容的提问来源于stack exchange,提问作者Vergil
相关产品推荐
相关产品推荐

