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

如何高效实现不同长度一维numpy数组从指定索引位置开始相加

高效实现numpy数组指定位置相加方案

核心思路是用numpy原生的切片+矢量运算,所有计算都在底层C层面执行,没有Python层的循环开销,性能远高于手写for循环,完全满足高频调用的需求。

实现代码(原地修改原数组)

如果你可以接受直接修改原数组b,用以下写法即可,内存开销最低:

import numpy as np

def add_arrays(b: np.ndarray, a: np.ndarray, i: int) -> np.ndarray:
    # 可选添加边界校验,避免索引越界
    assert i >= 0 and i + len(a) <= len(b), "起始索引超出数组b的合法范围"
    b[i:i+len(a)] += a
    return b

测试示例(和题目要求一致)

a = np.array([5, 10, 15])
b = np.array([0, 0, 10, 10, 10, 0, 0])
res = add_arrays(b, a, 2)
print(res)
# 输出:[ 0  0 15 20 25  0  0]

注:你给出的朴素实现实际是赋值操作,和示例的数组相加效果不符,以上实现按示例的相加逻辑编写,如果需要赋值效果,将代码中的+=替换为=即可。

不修改原数组的实现

如果你需要保留原数组b不变,先拷贝再操作即可:

def add_arrays_no_modify(b: np.ndarray, a: np.ndarray, i: int) -> np.ndarray:
    assert i >= 0 and i + len(a) <= len(b), "起始索引超出数组b的合法范围"
    res = b.copy()
    res[i:i+len(a)] += a
    return res

性能优势

  • 没有Python层循环的解释器开销,针对大数组场景,速度比手写for循环高几十到上百倍
  • 原地操作版本不需要额外申请大块内存,内存利用率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:03