数组的创建
1.创建指定数组
适用于:已知数组内元素具体数值
import numpy as np arr=np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr) #([a,b,c]) shape(3,3)2.创建递增数组
np.arange()
numpy.arange([start, ]stop, [step, ]dtype=None, *, device=None, like=None) #前两位数字 #[start, ]stop代表半开区间,表示不包含结束值的数字 #第三位数字 #[step, ]dtype=None代表步长,指的是等差数列的差 #公差为5,10到100内生成 arr2 = np.arange(10,100,5) print(arr2) 结果[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95]3.创建同值数组
np.zeros()
该方法需要传入shape参数,shape参数详解可以看上一节
numpy.ones(shape, dtype=None, order='C', *, device=None, like=None)[源代码] arr3= np.zeros((1,3)) print(arr3) 结果[[0. 0. 0.]]上述代码中输出结果并不为整数型,而是浮点型,笔者猜测这是为了避免插入的浮点数被截断
4.创建随机数组(伪随机数:初始值(种子)+算法)
np.random系列函数
该方法仍然需要传入shape参数
arr1=np.arange(0,10) arr2=arr1[0:-2]#数字代表的是位置,从0这个位置到-2指代的位置 print(arr1) print(arr2) 结果[0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7] arr2=arr1[0:-2:2]#每隔两个位置形如arr2=arr1[0:-2:2],第三位数指的是隔两个位置采样(跳跃采样)
矩阵的切片
矩阵既有行列,所以都要切(行向量和列向量都切)
形式:arr[0:1,0:1] arr[::2,::1]
#访问矩阵切片 arr = np.array([[1,2,3],[2,4,2],[55,55,22]]) arr1=arr[0:1,1:2] print(arr) print(arr1) 结果 [[ 1 2 3] [ 2 4 2] [55 55 22]] [[2]]arr2=arr[::2,::1]#行向量每隔两个元素,列向量每隔一个元素根据上述矩阵切片可以做到提取某一行或者某一列
arr = np.array([[1,2,3],[2,4,2],[55,55,22]]) #arr3=arr[::3,::1] # arr3=arr[3,:] arr3=arr[3] print(arr3) 结果 [[1 2 3]]注意,提取列不可以简写!!!
此外,提取列的时候出来的结果是列向量
arr = np.array([[1,2,3],[2,4,2],[55,55,22]]) arr1=arr[:,1]提取出来的列的形式是向量
如果想要它成为矩阵?
arr1=arr[:,1:2] 或者 arr1=arr[:,1].reshape(-1,1)数组切片仅是视图
不会创建新的变量
arr=np.array([1,2,3,4,5,6,7,8,9]) cut=arr[:2] cut[0]=12 print(cut) print(arr)上述代码中,切片结果改变,原数组也会发生改变,这样就不会造成大量内存的浪费
深度学习中arr[:]=表达式代替arr=表达式
当然如果真的需要为切片生成新的变量?
arr=np.array([1,2,3,4,5,6,7,8,9]) cut=arr[:2] cp=cut.copy()#复制备份切片 cp[1]=222 print(cp)#改变备份结果不会影响原数组 print(arr)数组赋值也是绑定(同上)
arr2=arr#将arr赋值给arr2 arr2[2]=2 print(arr2) print(arr)#结果相互影响数组的变形
转置
.T方法只对矩阵有效,如果想要把行向量转为列向量,就要先用reshape方法转为矩阵
arr=np.arange(5,10).reshape(1,-1).T arr2=arr[:,0] print(arr2)翻转
方法有两个:
上下翻转:np.flipud() 意思是flip up-down
左右翻转:np.fliplr() 意思是flip left-right
在数学中,向量是竖着放置的
arr=np.arange(10).reshape(2,5) print(arr) 结果 [[0 1 2 3 4] [5 6 7 8 9]] arr1=np.fliplr(arr) print(arr1) 结果 [[4 3 2 1 0] [9 8 7 6 5]]#向量 arr2=np.arange(10) arr3=np.flipud(arr2) print(arr2) 结果 [0 1 2 3 4 5 6 7 8 9] print(arr3) 结果 [9 8 7 6 5 4 3 2 1 0]变形
方法是 .reshape()
拼接
向量的拼接
numpy.concatenate(arrays,/,axis=0,out=None,*,dtype=None,casting='same_kind')
参数解释:前两个参数给的是需要拼接的向量
axis=0指的是设置按照哪个轴(方向)进行拼接,一般默认是轴0
arr= np.arange(10) arr1=np.arange(12) arr3=np.concatenate((arr,arr1)) print(arr3)矩阵的拼接
两个矩阵可以按照不同的维度拼接,但拼接的时候必须注意维度(axis参数)要吻合
此外,向量和矩阵之间不能相互拼接
分裂
向量的分裂:将得到更短的向量
方法 np.split()
numpy.split(ary,indices_or_sections,axis=0)
参数解释:第一个参数是要分裂的向量,第二个参数是分裂的起始位置和终止位置,第三个参数是轴
矩阵的分裂依旧要设定分裂的维度