【Numpy学习18】线性代数 | 您所在的位置:网站首页 › pp专卖店 › 【Numpy学习18】线性代数 |
Task09学习思维导图 注:为了节约行数,默认import numpy as np已经写在每段代码前,不再重复写入,如果有新的包引入,会在这里说明。 前言NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能: 函数描述dot两个数组的点积,即元素对应相乘。vdot两个向量的点积inner两个数组的内积matmul两个数组的矩阵积determinant数组的行列式solve求解线性矩阵方程inv计算矩阵的乘法逆矩阵 一、矩阵和向量的积当a和b均为一维时,dot()方法即为求2个数组对应的乘积:1*3+2*4 = 11 ,注意此时a和b的长度需要保持一致,否则会报错:
我们可以看到,此时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表示所求的矩阵,包括复数和实数。 举例:
一旦找到特征值λ,相应的特征向量可以通过求解特征方程(A – λE) v = 0 得到,其中v为待求特征向量,E为单位阵。 在numpy中,线性代数函数库 linalg提供了eig()方法同时计算特征值和特征向量:
验证成功。 三、矩阵分解 1、奇异值分解假设M是一个m×n阶矩阵,其中的元素全部属于域 K,也就是实数域或复数域。如此则存在一个分解使得: 其中U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,其中Σi即为M的奇异值。 常见的做法是为了奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定) 在numpy中,线性代数函数库 linalg提供了svd()方法进行奇异值分解: 例子: shape为(2,3) 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用于标准正交基的列举例:
Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解。它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的。Cholesky分解法又称平方根法,是当A为实对称正定矩阵时,LU三角分解法的变形: 注:A须为对称正定的矩阵,要求矩阵的所有特征值必须大于零,且生成的L为下三角矩阵。 例子: 对于向量: 即向量元素绝对值之和,x 到零点的曼哈顿距离 Ⅲ)2-范数2-范数也称为Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,表示x到零点的欧式距离 Ⅳ)p-范数即向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离。 Ⅴ)∞-范数当p趋向于正无穷时,即所有向量元素绝对值中的最大值 Ⅵ)-∞-范数当p趋向于负无穷时,即所有向量元素绝对值中的最小值 Ⅶ)0-范数零范数即是当p趋于零,可以证明这时候的极限 恰好是向量 非零元素的个数。 2)矩阵范数对于矩阵 列和范数,即所有矩阵列向量绝对值之和的最大值 Ⅱ)2-范数
称为行和范数,即所有矩阵行向量绝对值之和的最大值 Ⅳ)F-范数称为Frobenius范数,即矩阵元素绝对值的平方和再开平方。 例子: 行列式就是关于“面积”的推广。他就是在给定一组基下,N个向量张成的一个N维广义四边形的体积。这就是行列式的本质含义。 在numpy中,线性代数函数库 linalg提供了det()方法计算方阵的行列式: 输入的矩阵须为方阵,否则会报错: 方阵(行数、列数相等的矩阵)的列秩和行秩总是相等的,因此它们可以简单地称作矩阵A的秩。通常表示为r(A),rk(A)或。 m × n矩阵的秩最大为m和n中的较小者,表示为 min(m,n)。有尽可能大的秩的矩阵被称为有满秩;类似的,否则矩阵是秩不足(或称为“欠秩”)的。 设A是一组向量,定义A的极大无关组中向量的个数为A的秩。 在numpy中,线性代数函数库 linalg提供了matrix_rank()方法计算矩阵的秩:
![]() 例子: 我们先求出3*3的单位矩阵的秩,然后将其元素改变,再次求秩。 4、矩阵的迹在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A):
例子: 设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵:
在numpy中,线性代数函数库 linalg提供了inv()方法计算矩阵的逆: 例子:
在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]) 【知识点:数学函数、线性代数】 如何计算两个数组之间的欧式距离? np.linalg.det() np.linalg.inv() 【知识点:线性代数】 给定矩阵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 实验室设备网 版权所有 |