索引机制、切片、和迭代方法
索引机制
数组索引机制指的是用方括号([])加序号的形式引用单个数组元素,它的用处很多,比如抽取元素.选取数组的几个元素.甚至为其赋一个新值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#获取单个元素
a = np.arange(10,16)
# array([10,11,12,13,14,15])
a[4]
#14
#使用负数作为索引,从0开始,依次增加-1,实际表示的是从数组的最后一个元素向数组第一个元素移动。在负数索引机制中,数组第一个元素的索引最小。
a[-1]
# 15
a[-6]
# 10
#方括号内传入多个索引值可以同时选择多个元素
a[[1,3,4]]
# array([11,13,14])
#二维数组索引方法
A = np.arange(10,19).reshape((3,3))
# array([[10,11,12],[13,14,15],[16,17,18]])
A[1,2]
# 15 获取第二行第三列的元素切片操作
切片操作是指抽取数组的一部分元素生成新数组。对Python列表进行切片操作得到的数组是原数组的副本,而对NumPy数组进行切片操作得到的数组则是指向相同缓冲区的视图。
如想抽取(或查看)数组的一部分,必须使用切片句法;也就是,把几个用冒号(:)隔开的数字置于方括号里。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27a = np. arange(10,16)
# array([ 10,11,12,13,14,15])
a[1:5]
# array([11,12,13,14]) 从第二个到第六个元素这一部分
a[1:5:2]
# arrat[11,13] 从第二个到第六个元素这一部分,间隔为2
#省去第一个数字,NumPy会认为第一个数字是0(对应数组的第一个元素);省去第二个数字,NumPy则会认为第二个数字是数组的最大索引值;如省去最后一个数字,它将会被理解为1,也就是抽取所有元素而不再考虑间隔。
a[::2]
# array([10,12,14])
a[:5:2]
# array([10,12,14])
a[:5:]
# array([10,11,12,13,14])
#二维数组切片操作
A = array([[10,11,12],[13,14,15],[16,17,18]])
A[0,:]
# array([10,11,12]) 只抽取第一行
A[:,0]
# array([10,13,16]) 只抽取第一列
A[0:2,0:2]
# array([[10,11],
# [13,14]]) 如要抽取一个小点儿的矩阵,需要明确指定所有的抽取范围。
A[[0:2],0:2]
# array([[10,11],
# [16,17]]) 如要抽取的行或列的索引不连续,可以把这几个索引放到数组中。数组迭代
方法一,是使用for循环遍历,二维数组使用两层循环遍历
方法二,apply_along_axis()函数
这个函数接收三个参数:聚合函数、对哪条轴应用迭代操作和数组。如果axis选项的值为o0按列进行迭代操作,处理元素;值为1,则按行操作。例如,可以先求每一列的平均数,再求每一行的平均数。
1
2
3
4np.apply_along_axis(np.mean,axis=o,arr=A)
# array([ 13.,14.,15.])
np.apply_along_axis(np.mean,axis=1,arr=A)
# array([ 11.,14.,17.])