当前位置: 首页 > 后端技术 > Python

pythonnumpy库中矩阵使用指南

时间:2023-03-25 21:28:07 Python

矩阵是m行n列按m*n个数排列的表格,称为m行n列矩阵,简称m*n矩阵.下面的矩阵是一个3*2(3×2)矩阵,因为它有三行四列。在数学概念中,矩阵(Matrix)是一组排列成矩形阵列的复数或实数,它起源于由方程组的系数和常数组成的方阵。这个概念最早是由19世纪英国数学家凯利提出的。矩阵是高等代数和应用数学学科(如统计分析)中的常用工具。矩阵运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论上和实践上简化矩阵运算。对于一些广泛使用的特殊形式的矩阵,如稀疏矩阵和拟对角矩阵,有特定的快速运算算法。Python列表生成矩阵在Python中也有矩阵的概念,但是Python中并没有内置矩阵类型。但是我们可以把Python中的列表想象成一个矩阵。例如:A=[[2,8],[-5,32],[0,8]]我们可以把这个列表看成一个3行2列的矩阵。接下来我们看看如何使用嵌套列表。A=[[1,4,5,12],[-5,8,9,0],[-6,7,11,19]]print("A=",A)print("A[1]=",A[1])#第二行print("A[1][2]=",A[1][2])#第二行第三个元素print("A[0][-1]=",A[0][-1])#第一行最后一个元素column=[];#A中行的空列表:column.append(row[2])print("Thethirdcolumn=",column)当我们运行上面的代码时,我们得到的输出将是:A=[[1,4,5,12],[-5,8,9,0],[-6,7,11,19]]A[1]=[-5,8,9,0]A[1][2]=9A[0][-1]=12第三列=[5,9,11]使用嵌套列表作为矩阵更适合简单的计算任务,但是在Python中我们可以使用Numpy库,它有更好的方法处理矩阵。NumpyArray(数组)Python中的Numpy库是一个用于科学计算的包。它是一个强大的n维数组对象库。在我们要使用Numpy之前,我们需要安装它,那么我们如何才能安装它呢?答案很简单,我们只需要在我们的电脑上下载并安装Anaconda即可。Anaconda本身带有Numpy和其他几个与数据科学和机器学习相关的库。一旦我们安装了它,我们就可以导入并使用它的功能。Numpy为数字提供多维数组(实际上只是一个对象)。例如:importnumpyasnpa=np.array([1,2,3])print(a)#打印变量aprint(type(a))#最终输出的输出变量a的数据类型为[123]就像你看到的输出一样,Numpy中的数组类称为ndarray。那么我们如何创建一个Numpy数组呢?Numpy数组的创建方式有很多种,这里介绍几种创建数组的方式。1.创建整数、浮点数、复数数组importnumpyasnpA=np.array([[1,2,3],[3,4,5]])#创建整数数组print(A)A=np.array([[1.1,2,3],[3,4,5]])#创建十进制数组print(A)A=np.array([[1,2,3],[3,4,5]],dtype=complex)#创建一个复数数组print(A)当运行上面的代码时,我们得到的代码输出将是:[[123][345]][[1.12。3.][3.4.5.]][[1.+0.j2.+0.j3.+0.j][3.+0.j4.+0.j5.+0.j]]2.创建一个由0和1组成的数组要创建一个全为0的数组,我们需要使用np.zeros函数。np.zeros函数的参数如下:np.zeros(shape,dtype=float,order="C"):返回给定形状和类型的以0填充的数组。一般我们只需要设置第一个参数;shape:数组的形状dtype:数据类型,可选参数,默认为Numpy.float64(浮点数)order:可选参数,C代表行优先级;F代表列优先级dtype包含的数据类型:参数代表含义t位数t4代表4位数b布尔值(bool)真或假整数(int)i8(64位)u无符号整数u8(64位)f浮点数f8(64位)c浮点负数o对象s字符串s24u编码u24接下来,我们将创建一个3行2列的数组,其内容为0importnumpyasnpzeors_array=np.zeros((3,2))print(zeors_array)运行上面的代码我们得到输出:[[0.0.][0.0.][0.0.]]createsa1-filledarray对于数组,我们需要使用np.ones函数。np.ones函数的参数如下:np.ones(shape,dtype=float,order="C"):返回一个数组,里面填充了给定形状和类型的1,函数里面的参数是一样的作为np.zeros,一般只需要设置第一个参数即可。下面我们生成一个5行5列的整型数组。importnumpyasnpones_array=np.ones((5,5),dtype=np.int32)print(ones_array)运行上面的代码,代码中我们设置了dtype为int32位,占4个字节。因此,这个数组可以取值在-2147483648~2147483647之间,我们得到的输出是:[[11111][11111][11111][1111][11111]]3.使用arange()和reshape()生成矩阵np.arange(start,end,step)函数返回一个列表,其开始和结束的步长固定。np.arange函数分为三种情况:1、一个参数:参数值为终点,起点默认值为0,默认步长为12。两个参数:第一个参数为起点,第二个参数为终点,步长默认为3,三个参数:第一个参数为起点,第二个参数为终点,第三个参数为步长(支持小数)np.reshape(shape):shape参数是要设置的矩阵Shape下面我们生成一个长度为12的一维矩阵,然后设置为3行4列的矩阵importnumpyasnpa=np.arange(12)print('a=',a)b=np.arange(12).reshape(3,4)print('b=',b)通过运行上面的代码,我们得到输出:a=[01234567891011]b=[[0123][4567][891011]]矩阵运算接下来,我们将完成两个矩阵的加法,两个矩阵的乘法和transpose的矩阵。我们本可以使用嵌套列表更早地编写这些。那么让我们来看看如何通过Numpy数组来完成这些任务。矩阵之间的加法我们可以使用+运算符来计算两个numpy矩阵的对应元素importnumpyasnpA=np.array([[3,7],[5,-8]])B=np.array([[2,-4],[2,0]])C=A+Bprint(C)运行上面的代码,我们得到的输出是[[53][7-8]]矩阵之间的乘法将两个矩阵相乘,我们需要使用dot()方法。需要注意的是,*只能用于数组乘法(两个数组对应元素的乘法),不能用于矩阵乘法。将numpy导入为npA=np.array([[4,5,6],[-5,0,2]])B=np.array([[3,2],[4,-1],[4,-3]])C=A.dot(B)print(C)运行代码我们得到输出:[[56-15][-7-16]]矩阵的转置我们可以使用numpy.transpose计算矩阵的转置。importnumpyasnpA=np.array([[1,3,5],[2,2,1],[3,0,-3]])print(A.transpose())运行代码我们可以得到矩阵的转置把列变成行,把行变成列。[[123][320][51-3]]作为运行代码的结果,使用Numpy我们可以更简单地完成我们的任务。查看矩阵中的元素,行和列Viewingelementsinamatrix查看矩阵中的元素类似于列表。我们可以通过索引查看矩阵中的元素。让我们从简单的一维数据开始。importnumpyasnpA=np.array([2,4,6,8,10,12,14])print("A[0]=",A[0])#查看数组第一个元素print("A[2]=",A[2])#查看数组第三个元素print("A[-1]=",A[-1])#查看数组最后一个元素运行代码我们得到的输出是:A[0]=2A[2]=6A[-1]=14接下来我们看看如何查看二维数组(也就是矩阵)的元素importnumpyasnpA=np.array([[11,24,3,0],[-3,7,10,8],[0,-7,25,32]])#查看第一行第一个元素print("A[0][0]=",A[0][0])#查看第二行第三个元素print("A[1][2]=",A[1][2])#查看最后一个lineThelastelementprint("A[-1][-1]=",A[-1][-1])运行上面的代码,我们得到输出:A[0][0]=11A[1][2]=10A[-1][-1]=32查看矩阵中的行importnumpyasnpA=np.array([[11,24,3,0],[-3,7,10,8],[0,-7,25,32]])print("A[0]=",A[0])#查看第一行print("A[2]=",A[1])#查看第二行print("A[-1]=",A[-1])#看最后一行(t此矩阵中的第三行)并运行代码。我们得到的输出是:A[0]=[112430]A[2]=[-37108]A[-1]=[0-72532]查看矩阵中的列importnumpy作为npA=np.array([[11,24,3,0],[-3,7,10,8],[0,-7,25,32]])print("A[:,0]=",一个[:,0])#查看第一列print("A[:,3]=",A[:,2])#查看第三列print("A[:,-1]=",A[:,-1])#Lookingatthelastcolumn(thefourthcolumninthismatrix)andrunningthecodewegettheoutput:A[:,0]=[11-30]A[:,3]=[31025]A[:,-1]=[0832]矩阵的切片一维数组中的切片实际上类似于列表。比如我们看一下slicesofmatricesimportnumpyasnpmatrix=np.array([1,3,5,7,9,2,4,6,8,10])#查看第三到第五个元素print(matrix[2:5])#查看第一个到第四个元素print(matrix[:-5])#查看倒数第六个元素print(matrix[5:])#查看第一个到最后一个元素print(matrix[:])#反转列表查看print(matrix[::-1])运行上面的代码我们可以得到结果:[579][13579][246810][13579246810][10864297531]现在让我们看看如何划分一个矩阵importnumpyasnpA=np.array([[11,24,3,0],[-3,7,10,8],[0,-7,25,32]])print(A[:2,:4])#查看前两行和前撕print(A[:1,])#查看第一行和所有列print(A[:,2])#查看所有行和第二列print(A[:,2:5])#查看所有行和第三到第五列现在运行代码看看最终结果的结果。[[112430][-37108]][[112430]][31025][[30][108][2532]]以上是在Numpy库中Python希望能帮助大家理解矩阵的相关操作。有什么问题欢迎留言,我们一起讨论~。

猜你喜欢