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

Python中NumPy数组切片冒号用法疑问及与Matlab差异咨询

问题解答

1. 正确获取目标元素的方法

你要提取的元素1、46、91、136在x0中的索引正好等于它们的数值(因为np.arange(0,180)生成的是0到179的连续整数)。你的切片[1:45:180]不符合预期,是因为NumPy切片遵循start:stop:step规则:从start开始,每次累加step,直到小于stop的位置停止。

你的代码里step=180,从1开始加180得到181,已经远大于stop=45,所以只取到了第一个元素1。正确的切片应该把step设为45(1到46差45,46到91差45,以此类推),stop设为180(确保包含最后一个目标元素136,因为数组最大索引是179,180超过这个值会自动停止):

import numpy as np
x0 = np.arange(0, 180)
y0 = x0[1:180:45]
# 输出: array([  1,  46,  91, 136])

2. 为什么使用0:91:90能得到[0,90]

同样是因为切片的stop是不包含的:

  • 从0开始,第一次取索引0的元素(值0);
  • 累加step=90得到90,90小于stop=91,所以取索引90的元素(值90);
  • 再累加90得到180,180大于91,停止切片。

如果把stop设为90,那么90是不包含的,切片只会取到索引0的元素,所以必须把stop设为91才能包含索引90的元素。

3. Python(NumPy)与Matlab切片的核心差异及建议

核心差异

  • 索引起始:Python/NumPy是0起始索引,Matlab是1起始;
  • 切片范围:Python切片的stop不包含对应索引,Matlab的end是包含对应位置的;
  • 步长位置:Python切片格式是start:stop:step,Matlab是start:step:end(步长在中间);
  • 空值默认:Python中x[:5]等价于x[0:5:1],x[5:]等价于x[5:len(x):1];Matlab中x(1:5)是取1到5的元素,x(5:end)是取5到末尾的元素。

实用建议

  • 写切片前先明确目标元素的索引(尤其是0起始这点);
  • 不确定stop值时,可以直接留空(比如x0[1::45],等价于x0[1:len(x0):45]),避免计算错误;
  • 对比Matlab代码时,先把索引减1转换为0起始,再调整切片范围(比如Matlab的x(1:45:180)要转成Python的x0[0:180:45])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:08