前言
是支持 语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,还内建了大量的函数,方便你快速构建数学模型。
安装及导入numpy
安装numpy:
导入numpy,推荐做法是:
当然,如果你不想像上面导入,你也可以和其他模块导入方式一样直接,但还是推荐用这种方式,后面用到的地方都可以用别名了,更加简洁。
numpy数学中的计算
学习完后,可以熟练掌握数组各种方式的创建、属性及数组操作;对矩阵的常见操作、也可以对多项式求导、作图等。
1.求矩阵A的秩
矩阵A
2.求矩阵A的转置矩阵
上面两个问题用可快速计算出来:
运行结果:
手动求解:
手动求解矩阵A的秩
3.求矩阵A的逆矩阵
。
矩阵A
运行结果:
手动计算:
手动计算求矩阵A的逆矩阵
4.求的根,并求出其导函数
多项式 -2x^2 + 4x + 16的图像
运行结果:
多项式求根及一阶导数
数组的重要属性
的主要操作对象是同类的多维数组,即一个由相同类型元素(通常是数字)组成的、以正数为索引的数据表。在里面,维度称为“轴”。
举例来说,三维空间内一点的坐标有一个轴,三个元素,所以我们通常称它的长度为3。在以下所示的例子中,数组有两个轴,第一个轴的长度为2,第二个轴的长度为3。
的数组类型叫做,也就是数组(以下简称为数组)。需要注意的是,不同于标准库中的,后者只处理一维的数组并且提供了很少的功能。一个对象有以下一些重要的属性:
数组的轴的数量,即维度数量。
数组的维度。返回的是一个整数元组,指示了一个数组在各个维度的大小。对于一个n行m列的矩阵来说,它的是。的元组长度因此是轴的数量,即。
数组所有元素的数量,等于返回元组元素的乘积。
一个用于描述数组元素类型的对象。可以用标准Python类型来创造或指定的类型。另外,Numpy也提供了自己的类型,如,,等。
数组每个元素的字节大小。比如一个数组的元素为,它的为,
的为。这个属性等同于。
包含了数组每个实际元素的缓冲器。一般来说我们不会用到这个属性因为我们可以通过索引工具来获取到数组的每个元素的值。
数组的创建
通过上面知识,我们已经知道在中,数组是类型的,接下来我们就看看学习如何利用来创建各种数组。
1.利用构造函数创建
利用构造函数创建一维或多维数组,其参数是类似于数组的对象,如列表等。当然,也可以在创建的时候传入数据类型,通过指定,取值:
int系列包括(默认)、、、;
float系列包括:(默认)、、、、、、等,示例如下:
运行结果:
2.利用创建
中的用法和中一样,我们可以直接传入一个size,也可以指定起始值-结束值-步长,中还可以重新定义,如下面例子2.3中:。示例如下:
运行结果:
3.生产随机数来创建
利用会生产一系列从之间的符合标准正态分布随机数组成的数组。我们指定随机数的个数,即要得到的数组长度,还可以在创建的同时重新定义shape:。示例如下,要注意观察不同:
运行结果:
4.利用线性等分来创建
中线性等分来创建数组时,需要传入起始值、结束值、将这段数等分为份。
这种创建方式特别适用于:知道起始值、结束值和总个数的情况。常用来设置自变量的取值,例如:,将会得到等分100份后的数据组成的数组。
运行结果:
5.全为0的数组
提供了可以直接创建所有元素为0的数组,方式为:。
官网的解释:,示例如下:
运行结果:
6.全为1的数组
提供了可以直接创建所有元素为1的数组,方式为:。
官网的解释:,示例如下:
运行结果:
7.空元素数组
提供了可以直接创建所有元素为1的数组,方式为:,要注意的是它的元素的初始值是随机的,这取决于这块内存中的值。
官网的解释:,示例如下:
numpy中dtype类型
numpy数组生成函数汇总表
数组的常见操作1.基本运算
加、减、乘、除
对两个数组做加(减、乘、除)法运算,是对应位置的元素分别做加(减、乘、除)法运算。
示例如下:
运行结果:
说明:对两个数组做加(减、乘、除)法运算,是对应位置的元素分别做加(减、乘、除)法运算。正因为如此规则,所以要求参与运算的两个数组为同形数组,也就是要求必须一样,否则会报错。
下面例子中,保持的为不变;利用修改的为,此时再进行加法运算操作:
运算结果:
多次方
在numpy中,多次方运算同样作用于数组中每个元素。运算符号为,运算符后面是几就做几次运算。同样要求参与运算的两个数组为同形数组,也就是要求必须一样,否则会报错。
例如:表示对数组中每个元素做平方运算。
再如:表示对数组中每个元素做3次方运算。
运算结果:
矩阵乘
矩阵乘是用提供的,形如:或。需要注意的是,参与运算的两个数组要符合矩阵乘的乘法要求:前一个矩阵的列必须等于后一个矩阵的行。如果不满足此,则会运行报错。
下面例子, x ,计算后将会得到的矩阵。
运算结果:
提示:
如果你在运算过程中遇到,则说明参与运算的两个矩阵不符合矩阵乘的运算规则:前一个矩阵的列必须等于后一个矩阵的行。
和数值比较
和数值比较,形如,会把数组中每个元素和该数值进行比较,满足则为,不满足则为,最后会得到一个由组成的数组。
运算结果:
求和
numpy中求和提供了,可以计算一个数组中所有元素的和,也可以指定计算某个轴上的和。
如果是2维数组,表示计算列上的和;表示计算行上的和;
运行结果:
如果是3维数组,形如,此时axis=0表示计算为数组求和,计算后会得到一个数组。;axis=1表示计算列上的和,计算后会得到一个数组;axis=2表示计算行上的和,计算后会得到一个数组;
运行结果:
如果是更高维数组,则依次类推。关键是区分轴序号代表的是什么。
求最大值
numpy中求最大值提供了,可以计算一个数组中所有元素中最大的元素,也可以指定计算某个轴上的最大的元素。
求最大值所在的索引,
运行结果:
求最小值
numpy中求最小值提供了,可以计算一个数组中所有元素最小元素值,也可以指定计算某个轴上的最小元素值。
求最小值所在的索引,
运行结果:
求平均数、中位数、加权平均数
numpy中求平均数、中位数、加权平均数,分别提供了、、,也可以指定计算某个轴上的平均数、中位数、加权平均数。
运算结果:
累和
numpy中求累和提供了,可以计算一个数组中求累和,也可以指定计算某个轴上求累和。
运算结果:
累和计算规则如图:
累和计算规则
累差
numpy中求累和提供了,可以计算一个数组中求累和,也可以指定计算某个轴上求累和。
运行结果:
累差
非零元素
numpy中找一个数组中非零元素提供了,示例如下:
运行结果:
解析:调用非零元素方法得到了,由于原数组是2维的,所以打印结果中这个包含两个数组,分别表示:非零元素所在的行的索引组成的数组,非零元素所在的列的索引组成的数组。
可以看到除了处的元素外,其余都非零,所以有上面的打印结果。
排序
numpy中排序提供了,可以指定某个轴上元素排序,也可以指定排序使用的方法,数组排序时使用的方法。
a :所需排序的数组
axis:数组排序时的基准,axis=0,按行排列;axis=1,按列排列
kind:数组排序时使用的方法,其中: kind= ′ quicksort ′ 为快排;kind= ′ mergesort ′ 为混排;kind= ′ heapsort ′ 为堆排;
order:一个字符串或列表,可以设置按照某个属性进行排序。
运行结果:
矩阵的转置
numpy对矩阵的转置提供了多种实现方式,最常用的和。需要注意的是,numpy提供了迭代行,并没有提供直接迭代列。若要迭代列,一般都是先转置一下再迭代行就行了。
运行结果:
数据裁剪处理
numpy对数组中的元素提供了裁剪处理的方法, 对该函数的理解:小于最小值得按最小值处理;大于最大值的按最大值处理,处于最小值和最大值之间的保留原数据。示例如下:
运行结果:
展开铺平
numpy对数组中可以重新定义, 方法是,也提供了降维处理,直接展开铺平为一维。示例如下:
运行结果:
2.array合并
数组的合并,分为在垂直方向合并和在水平方向合并。
运行结果:
当然,也可以使用:
运行结果:
3.array分割
数组的拆分,分为在垂直方向拆分和在水平方向拆分。
运行结果:
当然,也可以使用:
运行结果:
4.array的copy
numpy中数组的赋值操作,默认是不进行拷贝的。下面例子中,arr1 和arr2指向了内存中的同一内存地址,是不同变量指向了同一对象。
运行结果:
通过一个变量修改数组的值,由于两个数组变量指向同一对象,所以另一处的值也是被修改后的:
运行结果:
上面例子中,之前一处两个变量指向的同一数组,数据发生了变化。是因为这句赋值操作默认采用的不拷贝。,如果,我想让arr1和arr2是独立的存在,当一处修改,另一处数据不变动。那么只需要赋值时采用复制一份即可。代码如下:
运行结果:
说明:复制后,和 就相互独立,一个数据修改不再影响另一个数组中的数据了。
索引操作
numpy中数组是矩阵的基础,两种可以相互转化。数组操作中,索引的处理决定了操作哪些元素,因此索引操作变得至关重要。
一维数组,形如,拿到的是元素;
一维数组,形如
此时拿到的是第1整行:;
拿到的是元素;
拿到的是第1整列:;
拿到的是第1行第1~3列的元素:;
方差、标准差
numpy提供了计算方差、标准差的函数,在统计计算时非常有用:
计算数组的极差:
计算方差(总体方差):
标准差:
运行结果:
多项式
多项式拟合:,拟合点集得到级多项式,其中为横轴长度,返回多项式的系数
多项式求导函数:,返回导函数的系数
得到多项式的n阶导函数:
多项式求根:
多项式在某点上的值:,返回多项式在横轴点上上的值
两个多项式做差运算:
线性代数基础运算
估计线性模型中的系数:
求方阵的逆矩阵:
求广义逆矩阵:
求矩阵的行列式:
解形如AX=b的线性方程组:
求矩阵的特征值:
求特征值和特征向量:
Svd分解:
概率分布
产生二项分布的随机数:,其中分别是每轮试验次数、概率、轮数
产生超几何分布随机数:,其中参数意义分别是物件1总量、物件2总量、每次采样数、试验次数
产生N个正态分布的随机数:
产生N个对数正态分布的随机数:
小结
本文学习了numpy的常用用法,具体包括:如何安装及导入numpy、数组的重要属性、数组的多种创建方式、数组的常见操作、数组的合并、拆分;索引操作、多项式、方差、标准差、概率分布等知识。这一节知识是后面学习和的基础,务必掌握。
参考资料:NumPy官网教程(英文)
人人懂编程ID:pythonDNA