You need to enable JavaScript to run this app. Python中用给定值与索引列表填充NumPy数组的最简最快方法
优惠活动
大模型
产品
解决方案
定价
更多

Python中用给定值与索引列表填充NumPy数组的最简最快方法

已初始化NumPy数组按给定索引批量填充值的最快实现

针对二维零数组按对应索引批量填值的场景,运行速度最快、实现最简洁的方案是使用NumPy内置的二维花式索引做一次性批量赋值,全程在底层C层执行,无Python层循环的额外开销,性能远高于逐点遍历赋值的方案。

索引逻辑拆解

结合输入和目标输出,索引对应关系如下:

  • 初始化数组为2行5列,行号范围[0,1],列号范围[0,4]
  • 传入的indices=[(1,2,4),(0,2,4)]格式逻辑为:
    • 第一个元组对应第0行的填充列位置,顺序与values一一匹配:列1填第一个值、列2填第二个值、列4填第三个值
    • 第二个元组对应第1行的填充列位置,顺序与values一一匹配:列0填第一个值、列2填第二个值、列4填第三个值
  • 最终填充结果为[[0,a,b,0,c],[a,0,b,0,c]],完全匹配预期。

核心实现代码

前置定义

import numpy as np
# 替换为实际业务值
a, b, c = 1, 2, 3
# 初始化目标零数组
M = np.zeros((2, 5))
values = [a, b, c]
indices = [(1, 2, 4), (0, 2, 4)]

最快批量赋值实现

# 构造所有填充点的行索引:每行重复len(values)次,匹配每行的填充点数量
row_idx = np.repeat(np.arange(M.shape[0]), len(values))
# 构造所有填充点的列索引:直接拼接两个行对应的列元组
col_idx = np.concatenate(indices)
# 构造对应填充值序列:values重复数组行数次,匹配行顺序
assign_values = np.tile(values, M.shape[0])
# 一次性完成全量赋值
M[row_idx, col_idx] = assign_values

方案特点

  • 性能最优:所有索引构造、赋值操作均为NumPy底层C实现,无Python循环解释开销,处理百万级元素规模的填充任务时,性能是逐点循环赋值的几十到上百倍
  • 适配性强:代码逻辑与输入格式完全对齐,不需要复杂的索引转换,减少人为操作出错概率
  • 开销极低:构造临时索引数组的内存占用随填充点数量线性增长,对于常规业务规模的数组,开销可忽略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 04:45:01