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

Pythonic方案:numpy数组如何高效执行多可变切片操作 避免for循环

numpy多切片批量操作无循环实现方案

方案1:np.r_ 拼接索引

适合切片数量少、单切片长度大的场景,内存开销低:

import numpy as np

a = np.array([0,1,2,3,4,5,6,7,8,9]) 
left = np.array([0,5])
right = np.array([2,8]) 

# 动态生成所有切片对象传给np.r_,自动展开为索引数组
slices = tuple(slice(l, r) for l, r in zip(left, right))
a[np.r_[slices]] = -1

执行后a的结果为 [-1 -1 2 3 4 -1 -1 -1 8 9],和循环实现结果完全一致。

方案2:广播生成掩码

完全向量化实现,无任何Python层循环,适合切片数量多、原数组总长度不大的场景:

import numpy as np

a = np.array([0,1,2,3,4,5,6,7,8,9]) 
left = np.array([0,5])
right = np.array([2,8]) 

ar = np.arange(len(a))
# 广播比较生成所有切片的掩码,合并后赋值
mask = ((ar >= left[:, None]) & (ar < right[:, None])).any(axis=0)
a[mask] = -1

选型参考

  • 切片数量<100、单切片平均长度>10:优先选np.r_方案
  • 切片数量>100、原数组总长度<1e5:优先选广播掩码方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:09