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

NumPy如何通过索引高效修改数组循环区间元素值

NumPy指定间隔连续赋值实现方案

完全存在基于NumPy原生向量化索引的单行高效实现,不需要使用Python层循环、列表推导这类低效写法,所有运算都在NumPy底层C层执行,性能和原生数组操作齐平。

测试场景复现

先构造和需求一致的测试数据:

import numpy as np
arr = np.arange(20)  # 生成0-19的示例数组
n = 5       # 间隔步长
m = 2       # 每次连续修改的元素长度
target = 100# 目标修改值

单行实现代码

两种常用的原生索引实现,都可以直接得到预期结果:

  • 分块切片实现(逻辑直观易读)
arr[np.arange(len(arr)).reshape(-1, n)[:, :m].ravel()] = target
  • 广播计算索引实现(内存占用更低,大数组性能更优)
arr[np.arange(m) + np.arange(0, len(arr), n)[:, None]] = target

执行后输出结果和需求完全一致:

array([100, 100,   2,   3,   4, 100, 100,   7,   8,   9, 100, 100,  12,
        13,  14, 100, 100,  17,  18,  19])

实现逻辑说明

  • 分块切片方案:先把全量索引按每n个元素为一组重构为二维数组,切片取出每组前m个目标位置,展平后直接用于赋值。如果数组长度不是n的整数倍,该方案会自动适配最后一个不足长度的分组,不会出现索引越界问题。
  • 广播索引方案:先生成每个修改块的起始索引(步长为n的等差序列),再通过广播叠加0到m-1的位置偏移,直接计算出所有需要修改的索引位置,不需要生成全量索引序列,大数组场景下内存开销更小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:48:21