要访问或修改ndarray数组中的元素,可以使用数组切片/索引。
如前所述,ndarray数组索引从0开始。
使用切片访问数组,首先通过内置slice
函数创建一个切片对象,该对象存储了创建时传入的start
、stop
和step
参数,把这个切片对象传给数组,我们就可以提取数组的一部分(切片)返回。
一维数组
示例
import numpy as np a = np.arange(10) s = slice(2,7,2) print(a[s])
[2 4 6]
上面的例子中,首先使用arange()
函数创建ndarray数组,然后定义一个切片对象,它的start
、stop
和step
值分别是2、7和2。当把这个切片对象传递给ndarray数组时,会从数组中提取一部分返回,返回部分的索引从2到7,步长2。
可以直接向ndarray数组传入start:stop:step
格式的切片参数,效果相同。
示例
import numpy as np a = np.arange(10) b = a[2:7:2] print(b)
输出
[2 4 6]
[i]
如果只放一个参数,则返回与索引对应的单个项。[:i]
如果在前面插入:
,则从该索引之前的所有项都将被提取。[start:stop]
如果使用了两个参数,中间用:
分隔,则使用默认步骤1,提取两个索引(不包括stop)之间的项。
示例
单项切片
import numpy as np a = np.arange(10) b = a[5] print(b)
输出
5
示例
从索引之后切片
import numpy as np a = np.arange(10) print(a[2:])
输出
[2 3 4 5 6 7 8 9]
示例
从索引之前切片
import numpy as np a = np.arange(10) print(a[:2])
输出
[0 1]
示例
在索引之间切片
import numpy as np a = np.arange(10) print(a[2:5])
输出
[2 3 4]
上述规则也适用于多维数组。
多维数组
示例
import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print(a) # 切片从索引开始 print('a[1:]切片 ') print(a[1:])
输出
[[1 2 3] [3 4 5] [4 5 6]] a[1:]切片 [[3 4 5] [4 5 6]]
切片还可以包括省略号(…),表示在该维度上选择全部。
示例
# 演示数组 import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print ('数组:') print (a) print (' ') # 返回一个数组,由第二列中的项目组成 print ('第二列中的项目是:') print (a[...,1]) print (' ') # 返回第二行 print ('第二行中的项目是:') print (a[1,...]) print (' ') # 返回第一列之后的项目 print ('第一列之后的项目:') print (a[...,1:])
输出
数组: [[1 2 3] [3 4 5] [4 5 6]] 第二列中的项目是: [2 4 5] 第二行中的项目是: [3 4 5] 第一列之后的项目: [[2 3] [4 5] [5 6]]