【Numpy学习18】线性代数 您所在的位置:网站首页 pp专卖店 【Numpy学习18】线性代数

【Numpy学习18】线性代数

#【Numpy学习18】线性代数| 来源: 网络整理| 查看: 265

Task09学习思维导图

在这里插入图片描述

注:为了节约行数,默认import numpy as np已经写在每段代码前,不再重复写入,如果有新的包引入,会在这里说明。

前言

NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能:

函数描述dot两个数组的点积,即元素对应相乘。vdot两个向量的点积inner两个数组的内积matmul两个数组的矩阵积determinant数组的行列式solve求解线性矩阵方程inv计算矩阵的乘法逆矩阵 一、矩阵和向量的积

在这里插入图片描述

1) 一维向量的积

在这里插入图片描述

当a和b均为一维时,dot()方法即为求2个数组对应的乘积:1*3+2*4 = 11 ,注意此时a和b的长度需要保持一致,否则会报错:

在这里插入图片描述

2)shape分别为(a,m)和(m,b)的矩阵之积

在这里插入图片描述 上面的例子就是正常的矩阵乘法,我们也可以用np.matmul()方法实现:

在这里插入图片描述 但需要保证a最后维度的维数和b第一维度的维数保持一致,否则会报错:

在这里插入图片描述

3)矩阵与标量之积

在这里插入图片描述 此时,可以直接用‘*’代替np.dot()方法

4)第二个参数是一维向量的情况

在这里插入图片描述

我们可以看到,此时ndarray在一维时的表达解答了我在前面学习过程中的思考,为什么一维ndarray变量的shape是(n,)而不是(,n),最后的结果依然保持一维。

此时需要满足矩阵最后维度的维数等于向量的长度,否则依然会报错:

在这里插入图片描述

注:对于线性代数中的n维行向量,numpy表示为形如(n,)的一位数组;对于线性代数中的n维列向量,numpy表示为行如(n,1)的二维数组。

二、矩阵特征值与特征向量

设 A 是n阶方阵,如果存在数λ和非零n维列向量 x,使得 Ax=λx 成立,则称 λ 是矩阵A的一个特征值(characteristic value)或本征值(eigenvalue)。

一般来说,我们需要先计算特征值,然后通过特征值去求特征向量:

1、求特征值

描述正方形矩阵的特征值的重要工具是特征多项式,λ是A的特征值等价于线性方程组(A – λI) v = 0 (其中I是单位矩阵)有非零解v (一个特征向量),因此等价于行列式|A – λI|=0 [1] 。 函数p(λ) = det(A – λI)是λ的多项式,因为行列式定义为一些乘积的和,这就是A的特征多项式。矩阵的特征值也就是其特征多项式的零点。

在numpy中,线性代数函数库 linalg提供了eigvals()方法进行计算:

在这里插入图片描述

其中a表示所求的矩阵,包括复数和实数。

举例:

在这里插入图片描述

在这里插入图片描述 验证成功。

2、求特征向量

一旦找到特征值λ,相应的特征向量可以通过求解特征方程(A – λE) v = 0 得到,其中v为待求特征向量,E为单位阵。

在numpy中,线性代数函数库 linalg提供了eig()方法同时计算特征值和特征向量:

在这里插入图片描述

在这里插入图片描述 这里注意 b[:i]代表的才是特征向量,而不是b[i]。

验证成功。

三、矩阵分解 1、奇异值分解

假设M是一个m×n阶矩阵,其中的元素全部属于域 K,也就是实数域或复数域。如此则存在一个分解使得: 在这里插入图片描述

其中U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,其中Σi即为M的奇异值。 常见的做法是为了奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定)

在numpy中,线性代数函数库 linalg提供了svd()方法进行奇异值分解: 在这里插入图片描述 参数解释:

a:原矩阵,维度大于1,元素为复数和实数均可full_matrices:控制分解后的大小compute_uv:是否只计算Σ矩阵hermitian:是否保证a是自共轭矩阵(埃尔米特矩阵),这样可以加快运算效率

例子:

shape为(2,3) 在这里插入图片描述 shape为(3,2) 在这里插入图片描述

2、QR分解

QR(正交三角)分解法是求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法,与此正规正交矩阵的通用符号Q有关。 如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解:

在这里插入图片描述

注:A须为Hessenberg矩阵。

使用qr分解有助于加快解方程或求解速度即收敛速度。

在numpy中,线性代数函数库 linalg提供了qr()方法进行QR分解: 在这里插入图片描述

参数解释:

a:原矩阵,形如(M,N)mode:规定不同的返回矩阵类型及shape,默认返回(M,K)和(K,N)两个矩阵q和r,且q用于标准正交基的列

举例:

在这里插入图片描述 最后面的q和q的转置做矩阵乘法是为了验证q是正交矩阵: 在这里插入图片描述

3、Cholesky分解

Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解。它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的。Cholesky分解法又称平方根法,是当A为实对称正定矩阵时,LU三角分解法的变形:

在这里插入图片描述

注:A须为对称正定的矩阵,要求矩阵的所有特征值必须大于零,且生成的L为下三角矩阵。

例子:

在这里插入图片描述

四、范数和其它数字 1、范数 Ⅰ)向量范数

对于向量: 在这里插入图片描述 常用的范数包括:

Ⅱ)1-范数

在这里插入图片描述

即向量元素绝对值之和,x 到零点的曼哈顿距离

Ⅲ)2-范数

在这里插入图片描述

2-范数也称为Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,表示x到零点的欧式距离

Ⅳ)p-范数

在这里插入图片描述

即向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离。

Ⅴ)∞-范数

在这里插入图片描述

当p趋向于正无穷时,即所有向量元素绝对值中的最大值

Ⅵ)-∞-范数

在这里插入图片描述

当p趋向于负无穷时,即所有向量元素绝对值中的最小值

Ⅶ)0-范数

零范数即是当p趋于零,可以证明这时候的极限

在这里插入图片描述

恰好是向量

在这里插入图片描述

非零元素的个数。

2)矩阵范数

对于矩阵

在这里插入图片描述

Ⅰ)1-范数

在这里插入图片描述

列和范数,即所有矩阵列向量绝对值之和的最大值

Ⅱ)2-范数

在这里插入图片描述 在这里插入图片描述 表示 在这里插入图片描述 的最大特征值,称为谱范数

Ⅲ)∞-范数

在这里插入图片描述

称为行和范数,即所有矩阵行向量绝对值之和的最大值

Ⅳ)F-范数

在这里插入图片描述

称为Frobenius范数,即矩阵元素绝对值的平方和再开平方。

在这里插入图片描述

例子:

在这里插入图片描述

2、方阵的行列式

行列式就是关于“面积”的推广。他就是在给定一组基下,N个向量张成的一个N维广义四边形的体积。这就是行列式的本质含义。

在这里插入图片描述

在numpy中,线性代数函数库 linalg提供了det()方法计算方阵的行列式: 在这里插入图片描述 例子:

在这里插入图片描述

输入的矩阵须为方阵,否则会报错: 在这里插入图片描述

3、矩阵的秩

方阵(行数、列数相等的矩阵)的列秩和行秩总是相等的,因此它们可以简单地称作矩阵A的秩。通常表示为r(A),rk(A)或。 m × n矩阵的秩最大为m和n中的较小者,表示为 min(m,n)。有尽可能大的秩的矩阵被称为有满秩;类似的,否则矩阵是秩不足(或称为“欠秩”)的。 设A是一组向量,定义A的极大无关组中向量的个数为A的秩。

在numpy中,线性代数函数库 linalg提供了matrix_rank()方法计算矩阵的秩:

在这里插入图片描述 参数解释:

M:原矩阵tol: 在这里插入图片描述hermitian:是否保证a是自共轭矩阵(埃尔米特矩阵),这样可以加快运算效率

例子: 在这里插入图片描述

我们先求出3*3的单位矩阵的秩,然后将其元素改变,再次求秩。

4、矩阵的迹

在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A):

在这里插入图片描述 在numpy中,实现方法如下:

在这里插入图片描述 参数解释:

a:原数组offset:对角线与主对角线的偏移量。可以是正反两面。默认为0axis1,axis2:当a维度大于2时,需要制定计算矩阵的迹的限定面dtype:计算和返回时的数据类型out:用来存放输出数据,需要保证正确的数据类型

例子: 在这里插入图片描述

五、解方程和逆矩阵 1、逆矩阵

设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵:

在这里插入图片描述 表达为:

在这里插入图片描述 在这里插入图片描述

在numpy中,线性代数函数库 linalg提供了inv()方法计算矩阵的逆: 在这里插入图片描述

在这里插入图片描述

例子:

在这里插入图片描述 我们在求完A的逆矩阵之后利用逆矩阵的性质去验证了A和B的关系。

2、求解线性方程组

在numpy中,线性代数函数库 linalg提供了solve()方法求解线性方程组: 在这里插入图片描述

例子:

在这里插入图片描述

方法一直接使用solve()方法。方法二将两边同时左乘A的逆矩阵,求解x的过程就变为A的逆矩阵和b的矩阵乘法。

六、练习 1、计算两个数组a和数组b之间的欧氏距离

a = np.array([1, 2, 3, 4, 5]) b = np.array([4, 5, 6, 7, 8]) 【知识点:数学函数、线性代数】

如何计算两个数组之间的欧式距离?

在这里插入图片描述

在这里插入图片描述

2、计算矩阵的行列式和矩阵的逆

np.linalg.det()

np.linalg.inv()

在这里插入图片描述

3、给定矩阵A和数组b,求解线性方程组

【知识点:线性代数】

在这里插入图片描述

4、计算特征值和特征向量

给定矩阵A[[4,-1,1],[-1,3,-2],[1,-2,3]]

【知识点:线性代数】

在这里插入图片描述

参考文献

#向量范数与矩阵范数 1、https://zhuanlan.zhihu.com/p/35897775

#矩阵的秩与行列式的几何意义 2、https://zhuanlan.zhihu.com/p/19609459

#SVD矩阵的奇异值分解 3、https://wenku.baidu.com/view/4b5012f8a1116c175f0e7cd184254b35effd1a51.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有