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

为何NumPy切片采用左闭右开机制?二维切片行为解析

NumPy切片规则:左闭右开的一致性逻辑

核心规则

NumPy的切片全程遵循「左闭右开」规则:即[start:end]格式的切片,会包含start索引对应的元素,但绝对不包含end索引对应的元素。不管是一维数组还是多维数组,每个维度的切片逻辑完全统一,不存在所谓的“不一致”。

你的例子拆解

看你用的二维数组:

import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
  • 第一个维度的切片0:2:左闭右开,包含索引0和1的元素(也就是两行),元素数量是2-0=2,对应结果的两行数据
  • 第二个维度的切片1:4:同样左闭右开,包含索引1、2、3的元素,元素数量是4-1=3,对应每个子数组里的[2,3,4]和[7,8,9]

你之前误以为0:2会取3个值,是混淆了索引范围和元素数量——切片的元素个数直接等于end - start,不需要额外调整数值,这正是左闭右开规则的优势之一。

为什么用左闭右开?

这个设计不是NumPy独有的,和Python原生列表切片逻辑完全对齐,主要有三个原因:

  • 计算长度直观:不用费劲算end - start +1,直接用结束索引减起始索引就是切片的元素数量
  • 拼接切片方便:比如arr[0:2]和arr[2:4]可以无缝拼接成arr[0:4],不会重复或遗漏元素
  • 学习成本低:熟悉Python基础语法的人,不用重新适应新规则

一维切片验证

拿一维数组举例:

arr_1d = np.array([1,2,3,4,5])
print(arr_1d[1:4])  # 输出 [2 3 4]

同样是左闭右开,包含索引1、2、3的元素,和二维切片逻辑完全一致。

内容的提问来源于stack exchange,提问作者Tlaloc-ES

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:03:21