Numpy最重要的一个特点就是其N维数组对象,即ndarray,该对象是一种快速而灵活的大数据集容器,实际开发中,我们可以利用这种数组对整块数据执行一些数学运算。
有关ndarray,我们就从最简单的一维数组操作以及其构造开始说起:
import numpy as np if __name__ == '__main__': print(1) #输出一个字典对象i+rand print({i :np.random.rand() for i in range(2)}) #输出字典对象i+list(rand) print({i: np.random.rand(2) for i in range(2)}) #在变量前面加一个?问号,可以将有关该对象的一些通用信息显示出来 a=[] for i in range(3): #这里b就是一个有3个随机小数的数组 b = np.random.rand(3) print(b.shape) print(b) a.append(b) print(a) #从管道中输出a # print(a.pop(0)) # print(a) #通过array这个方法将a数组转成nparray c=np.array(a) print("c============",c) #这里随机获取一个二维数组 d=np.empty((3,6)) print(d) #np的基本索引和切片 #先生成一个从0到10的一维数组[0 1 2 3 4 5 6 7 8 9] arr=np.arange(10) #针对这个np我们可以简单切片,比如我要获取5,6,7可以通过这个方法:arr[开始的index,结束的index],这里的index从0开始, #左包含右不包含 arr1=arr[5:8] print(arr1) #对一个切片进行赋值时,该值会传播整个选取:比如arr[5:8]=12的输出值就是[ 0 1 2 3 4 12 12 12 8 9] arr[5:8]=12 print(arr) #如果操作需要,我们可以针对切片中再一次进行切片赋值 arr_slice=arr[4:8] #[4,12,12,12] print(arr_slice[0]) #4 print(arr_slice[1]) # 12 arr_slice[0:2]=89 print(arr_slice) #[89 89 12 12] print(arr) #[ 0 1 2 3 89 89 12 12 8 9] #如果你想要得到的是ndarray切片的一份副本而不是视图,就需要进行复制操作,比如 arrCopy=arr.copy() print(arrCopy)
当然,针对多元的数据更加需要多元的数组,比如二维数组,这里针对二维数组切片和索引进行简单的讲解:
#如果是多维数组,比如一个二维数组,我们操作可以如下,先生成一个2维数组:[[0 1 2][3 4 5][6 7 8]] x=[] for i in range(3): x1=np.arange(3*i,3*i+3) x.append(x1) arr2d=np.array(x) print(arr2d) #我们可以看看这个二维数组如何切片,有关切片索引 print(arr2d[1]) # [3 4 5] # 二维数组切片索引和一维稍微不同,以下两个两两等价 print(arr2d[0:2]) # [[0 1 2][3 4 5]] print(arr2d[:2]) # [[0 1 2][3 4 5]] print(arr2d[2][0]) # 6 print(arr2d[2,:1]) #[6] print(arr2d[2,:2]) #[6 7] #更多维数组操作也类似上面一样,举一反三
更多维度的数组操作也类似上面,我们可以举一反三,除了这一部分之外,还有布尔索引和花式索引
花式索引:花式索引是一个numpy术语,它指利用整数数组进行索引,例如,我们使用一个8*4的数组
#有关花式索引 #花式索引是一个numpy术语,它指利用整数数组进行索引,例如,我们使用一个8*4的数组 # arr=np.empty((8,4)) arr=np.arange(32).reshape((8,4)) print(arr) #以特定顺序选取子集,这里选取的就是第5,4,1,7行的子数组 print(arr[[4,3,0,6]]) #如果我们使用负数索引,则选取的从末尾开始-1为最后一行,-2为倒数第二行 print(arr[[-1,-2]]) #这里输出的分别是arr第5行的第一个数,第4行的第2个数,第1行的第3个数和第7行的第4个数组成的数组 print(arr[[4,3,0,6],[0,1,2,3]]) #这里输出分别为arr第5,4,1,7行的第1,2,3个数组成的数组 #[[16 17 18] [12 13 14] [ 0 1 2] [24 25 26]] print(arr[[4,3,0,6]][:,[0,1,2]])