机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。
安装方法:
1 | pip3 install numpy |
1. ndarray数组基础
python中用列表保存一组值,可将列表当数组使用。另外,python中有array模块,但它不支持多维数组,无论是时列表还是array模块都没有科学运算函数,不适合做矩阵等科学计算。numpy没有使用python本身的数组机制,而是提供了ndarray对象,该对象不仅能方便地存取数组,而且拥有丰富的数组计算函数。
使用前先导入Numpy模块
1 | import numpy as np |
1)数组的创建及使用
1 | >>> x=np.array([[1.0,0.0,0.0],[0.,1.,2.]]) #定义了一个二维数组,大小为(2,3) |
另外,还有两种创建序列数组的函数arrange和linspace,和range函数类似,但它们都属于Numpy里面。
arange(a,b,c) 参数分别表示开始值,结束值,步长
linspace(a,b,c) 参数分别表示开始值,结束值,元素数量
还可以调用它们自身的方法reshape()指定形状
1 | >>> arange(15).reshape(3,5) |
2)特殊数组**
- zeros数组:全零数组,元素全为零。
- ones数组:全1数组,元素全为1。
- empty数组:空数组,元素全近似为0。
1 | >>> zeros((3,4)) |
3)数组索引**
Numpy数组每个元素,每行元素,每列元素都可以用索引访问。
1 | >>> c=arange(24).reshape(2,3,4) |
4)数组运算**
数组的加减乘除以及乘方运算方式为,相应位置的元素分别进行运算。
1 | >>> a=array([20,30,40,50]) |
5)数组的拷贝**
数组的拷贝分浅拷贝和深拷贝两种,浅拷贝通过数组变量的赋值完成,深拷贝使用数组对象的copy方法。
浅拷贝只拷贝数组的引用,如果对拷贝进行修改,源数组也将修改。如下:
1 | >>> a=ones((2,3)) |
深拷贝会复制一份和源数组一样的数组,新数组与源数组会存放在不同内存位置,因此对新数组的修改不会影响源数组。如下:
1 | >>> a=ones((2,3)) |
2. 矩阵
1)创建矩阵**
Numpy的矩阵对象与数组对象相似,主要不同之处在于,矩阵对象的计算遵循矩阵数学运算规律。矩阵使用matrix函数创建。
1 | >>> A=matrix('1.0 2.0;3.0 4.0') |
2)矩阵运算
矩阵的常用数学运算有转置,乘法,求逆等。
1 | >>> A.T #转置 |
Numpy线性代数相关函数
- numpy.dot()
此函数返回两个数组的点积。 对于二维向量,其等效于矩阵乘法。 对于一维数组,它是向量的内积。 对于 N 维数组,它是a的最后一个轴上的和与b的倒数第二个轴的乘积。
1 | >>> a=np.array([[1,2],[3,4]]) |
- numpy.vdot()
此函数返回两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数id是多维数组,它会被展开。
1 | >>> np.vdot(a,b) |
- numpy.inner()
此函数返回一维数组的向量内积。 对于更高的维度,它返回最后一个轴上的和的乘积。
1 | >>> x=np.array([1,2,3]) |
- numpy.matmul()
函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。
另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。
1 | #对二维数组(列表),就相当于矩阵乘法 |
- numpy.linalg.det()
行列式在线性代数中是非常有用的值。 它从方阵的对角元素计算。 对于 2×2 矩阵,它是左上和右下元素的乘积与其他两个的乘积的差。
换句话说,对于矩阵[[a,b],[c,d]],行列式计算为ad-bc。 较大的方阵被认为是 2×2 矩阵的组合。
numpy.linalg.det()函数计算输入矩阵的行列式。
1 | >>> a=np.array([[1,2],[3,4]]) |
- numpy.linalg.solve()
该函数给出了矩阵形式的线性方程的解。
例:
x + y + z = 6
2y + 5z = -4
2x + 5y - z = 27
写成矩阵形势
可表示为AX=B
即求X=A^(-1)B
逆矩阵可以用numpy.linalg.inv()函数来求
1 | >>> x=np.array([[1,2],[3,4]]) |
计算线性方程的解
1 | a=np.array([[1,1,1],[0,2,5],[2,5,-1]]) |
输出如下:
完毕!