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

Python NumPy优化需求:高效实现数组列表指定位置元素相加

高效实现arr2元素按指定位置插入arr1的方案

问题场景

给定以下数组:

arr1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0]]
arr2 = [[1,2],[3,4],[4,5]]
positions = [0,1,2]

需要将arr2的每个子数组插入到arr1对应子数组的positions指定起始索引处,最终得到:

[[1,2,0,0],[0,3,4,0],[0,0,4,5]]

常规循环方案在数据量大时效率偏低,以下是两种高效实现方式:


方案1:Python内置切片赋值(轻量高效)

利用Python内置的切片赋值特性,这是底层优化过的操作,比手动逐个元素赋值快得多:

for row1, row2, pos in zip(arr1, arr2, positions):
    # 用切片替换arr1对应位置的元素区间
    row1[pos:pos+len(row2)] = row2

执行后arr1会直接被修改为目标结果。如果需要保留原arr1,可以先创建深拷贝:

import copy
arr1_copy = copy.deepcopy(arr1)
for row1, row2, pos in zip(arr1_copy, arr2, positions):
    row1[pos:pos+len(row2)] = row2

方案2:Numpy向量化操作(大规模数据首选)

如果处理的是超大规模数组,使用Numpy的向量化操作可以彻底规避Python层面的循环,借助C底层实现大幅提升效率:

import numpy as np

# 转换为Numpy数组
np_arr1 = np.array(arr1)
np_arr2 = np.array(arr2)
pos_array = np.array(positions)

# 生成赋值所需的行、列索引
row_indices = np.repeat(np.arange(np_arr1.shape[0]), np_arr2.shape[1])
col_indices = np.concatenate([np.arange(p, p + len(row)) for p, row in zip(pos_array, np_arr2)])

# 批量完成赋值
np_arr1[row_indices, col_indices] = np_arr2.flatten()

# 可选:转换回Python列表
result = np_arr1.tolist()

常见问题说明

如果之前尝试切片操作失败,大概率是未正确计算切片的结束位置(pos:pos+len(row2)),或者误操作了新创建的数组而非原数组的引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:57:29