我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

python代码里面,是可以通过冒号操作对numpy数据进行切片操作的。通常使用一个冒号进行切片操作,实际上还可以使用两个冒号进行类似的操作。这就是本文要讨论的主要内容。如何理解两个连续冒号操作呢?

苏南大叔:python代码,如何使用两个冒号获取numpy变量的切片数据? - 两个冒号获取切片数据
python代码,如何使用两个冒号获取numpy变量的切片数据?(图1-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔和计算机代码的故事。本文测试环境:win10python@3.12.0

龙套数据

import numpy as np
x = np.arange(0,5)               # [0 1 2 3 4]
# x = np.array([0,1,2,3,4])      # [0 1 2 3 4]

arrange()的用法,请参考:

通常情况下,是使用一个冒号[start:end]来对其进行切片操作的,数据范围是:[start,end)。比如:

y = x[:]    # [0 1 2 3 4]
y = x[0:2]  # [0 1]
y = x[::]   # [0 1 2 3 4]

如何理解使用两个冒号的用法呢?其实用法是[start:end:step],数据范围依然是:[start,end)

仅仅指定step

省略了startend,如果取负数,就从后面开始。【注意:x[::-1]的实际效果是把x数据逆转了】

s1 = x[::1]  # [0 1 2 3 4]
s2 = x[::-1] # [4 3 2 1 0]
print(s1,type(s1))
print(s2,type(s2))

输出:

[0 1 2 3 4] <class 'numpy.ndarray'>
[4 3 2 1 0] <class 'numpy.ndarray'>

步长step换个试试看:

s3 = x[::2]  # [0 2 4]
s4 = x[::-2] # [4 2 0]

输出:

[0 2 4]
[4 2 0]

指定三个参数(双重范围)

下面的代码,表明:结束end值是可以大于或者小于实际的主题的值的。【效果上就是设置了两遍范围】不会报错。

s6 = x[0:4:1]   # [0 1 2 3]
s7 = x[0:4:2]   # [0 2]
s8 = x[1:4:2]   # [1 3]
s6 = x[0:5:1]   # [0 1 2 3 4]
s7 = x[0:5:2]   # [0 2 4]
s8 = x[1:5:2]   # [1 3]
s6 = x[0:6:1]   # [0 1 2 3 4]
s7 = x[0:6:2]   # [0 2 4]
s8 = x[1:6:2]   # [1 3]

双冒号索引范围

下面的代码表明:

  • .arrange()中,startend是实际数值。
  • ::中,startend是索引值。
import numpy as np
x = np.arange(3,9)    # [3,9)=>[3 4 5 6 7 8]
s6 = x[0:6:1]         # [0,6)步长1=>[3 4 5 6 7 8]
s7 = x[0:6:2]         # [0,6)步长2=>索引[0,2,4)=>[3 5 7]
s8 = x[1:6:2]         # [1,6)步长2=>索引[1,3,5)=>[4 6 8]

结语

更多苏南大叔的python经验文章,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python