Numpy对数组的操作十分高效,这主要源于其对索引的使用。数组索引的使用和列表(list)类似,索引都是从0开始,在访问或者批量引用时,遵循左闭右开的原则。
对于一维数组
import numpy as np
arr = np.arange(10)
arr[3] #访问索引为3的元素,即第4个元素
arr[2:6] #访问索引位置为2至5的元素,共4个
arr[:5] #访问索引位置5之前的所有元素,共5个
arr[-1] #访问倒数第一个元素,‘-’表示倒数
arr[5:-1:1] #以1为步长访问索引位置5到倒数第一个元素,不包括倒数第一个
arr[8:1:-2] #以2为步长反方向访问索引位置8到索引位置1的元素,不包括索引位置1
arr[::-1] #倒序逐一访问所有元素
arr[4:6] = 101,102 #将索引位置4和5的元素改为101和102
对于二维数组
arr = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
arr[0,2:4] #索引第0行中第2列和第3列元素
arr[1:,4:] #索引2,3行中第5列元素
arr[:,2] #索引2列元素
arr[[(0,1,2),(1,2,3)]] #索引arr[0,1],arr[1,2],arr[2,3]
arr[1:,(0,2,3)] #索引第2,3行第0和2,3列元素
#改变数组的形状
arr = np.arange(20) #创建一个有20个元素的一维数组
arr.reshape(4,5) #将arr改为四列五行的二维数组
数组形状的改变
在对数组进行操作的时候,有时候需要改变数组的维度,在 NumPy 中,常用 reshape 函数来改变数组的形状,但需要注意,元素个数必须匹配,如果指定的维度和数组元素的个数不吻合,会报错。还有ravel和flatte 函数这两个函数,都可以将数组展平,区别在于ravel函数只能对数组进行横向的展平,但是flatten函数则可以选择横向或者纵向展平,示例如下:
arr = np.arange(20) #创建一个有20个元素的一维数组
arr.reshape(4,5) #将arr改为四列五行的二维数组arr = np.arange(20).reshape(4,5) #创建四列五行的二维数组
arr.ravel() #展平数组--横向
arr.flatten() #展平数组--横向
arr.flatten('F') #展平数组--纵向
NumPy 也可以对数组进行组合,数组的组合类似于线性代数中矩阵的分块或者聚合,数组的组合主要有横向组合与纵向组合,用于数组组合的函数有hstack、vstack以及 concatenate,使用示例如下:
#先创建两个数组
arr1 = np.arange(20).reshape(4,5)
arr2 = arr1 * 2
np.hstack((arr1,arr2)) #横向合并
np.vstack((arr1,arr2)) #纵向合并
np.concatenate((arr1,arr2),axis=1) #横向合并
np.concatenate((arr1,arr2),axis=0) #纵向合并