8.Numpy索引和切片

在 NumPy 中,如果想要访问,或修改数组中的元素,您可以采用索引或切片的方式,比如使用从 0 开始的索引依次访问数组中的元素,这与 Python 的 list 列表是相同的。

NumPy 提供了多种类型的索引方式,常用方式有两种:基本切片与高级索引。本节重点讲解基本切片。

基本切片

NumPy 内置函数 slice() 可以用来构造切片对象,该函数需要传递三个参数值分别是 start(起始索引)、stop(终止索引) 和 step(步长) ,通过它可以实现从原数组的上切割出一个新数组。

示例如下:

  1. import numpy as np
  2. a = np.arange(10)
  3. #生成切片对象
  4. s = slice(2,9,3)#从索引2开始到索引9停止,间隔时间为2
  5. print(a[s])

输出结果:

[2 5 8]

您也可以通过冒号来分割切片参数,最终也能获得相同结果,示例如下:

  1. import numpy as np
  2. a = np.arange(10)
  3. b = a[2:9:2]
  4. print(b)

输出结果:

[2 5 8]

下面对冒号切片做简单地说明:

  • 如果仅输入一个参数,则将返回与索引相对应的元素。 对于上述示例来说[3] 就会返回 3。
  • 如果在其前面插入“:”如[:9],则会返回 0-8 的所有数字(不包含9)。
  • 如是 [2:] 则会返回 2-9 之间的数字。
  • 如果在两个参数之间,如[2:9],则对两个索引值之间的所有元素进行切片(不包括停止索引)。


下面对冒号类型的切片做了简单的实例演示:

示例 1:

  1. a = np.arange(10)
  2. b = a[3]
  3. print (b)

输出结果:

3

示例 2:

  1. import numpy as np
  2. a = np.arange(10)
  3. print (a[2:])

输出结果:

[2  3  4  5  6  7  8  9]

示例 3:

  1. import numpy as np
  2. a = np.arange(10)
  3. print a[2:5]

输出结果如下:

[2  3  4] 

多维数组切片

多维数组切片操作,实例如下:

  1. import numpy as np
  2. a = np.array([[1,2,3],[3,4,5],[4,5,6]])
  3. print(a)
  4. # 从[1:]索引处开始切割
  5. print(a[1:])

输出结果:

[[1 2 3]
 [3 4 5]
 [4 5 6]]
#切割后的新数组
[[3 4 5]
 [4 5 6]]

注意:切片还可以使用省略号“…”,如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素。

实例演示如下:

  1. import numpy as np
  2. #创建a数组
  3. a = np.array([[1,2,3],[3,4,5],[4,5,6]])
  4. #返回数组的第二列
  5. print (a[...,1])
  6. #返回数组的第二行
  7. print (a[1,...])
  8. #返回第二列后的所有项
  9. print (a[...,1:])

输出结果:

#第二列数组
[2 4 5]
#第二行数组
[3 4 5]
#返回第二列及以后的所有元素
[[2 3]
[4 5]
[5 6]]
posted @ 2022-08-02 17:12  随遇而安==  阅读(57)  评论(0编辑  收藏  举报