☰
03Numpy基础(中)
2026/10/8 19:28:15 网站建设 项目流程

数组的创建

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)

参数解释:第一个参数是要分裂的向量,第二个参数是分裂的起始位置和终止位置,第三个参数是轴

矩阵的分裂依旧要设定分裂的维度

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询