前言
本文其实值属于:程序员的数学【AIoT阶段二】 的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 线性代数高级,读之前建议先看:程序员的数学【线性代数基础】,本文涵盖了一些计算的问题并使用代码进行了实现,安装代码运行环境见博客:最详细的Anaconda Installers 的安装【numpy,jupyter】(图+文),如果你只是想要简单的了解有关线代的内容,那么只需要学习一下博文:NumPy从入门到高级,如果你是跟着博主学习AIoT的小伙伴,建议先看博文:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),如果你没有Python基础,那么还需先修博文:Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)
一、特征值和特征向量
1.1 概念定义
🚩两个向量相乘效果图如下:
看图,这张图片竖直方向进行偏移,形象说明了向量相乘效果:
import numpy as np A = np.random.randint(1, 10, size = (4, 4)) display(A) print('------------------------') if np.linalg.matrix_rank(A) == 4: # 必须是满秩矩阵 # 实对称矩阵特征值为实数,非对称矩阵和复矩阵特征值可能为复数 w, v = np.linalg.eig(A) # 返回特征值和特征向量 display(w, v) w = np.real(w) v = np.real(v) print('------------------------') display(A.dot(v[:, 0])) display(w[0] * v[:, 0])
实对称矩阵,求解特征值和特征向量为实数
# 实对称矩阵 import numpy as np B = np.array([[1, 2, 3], [2, 5, 8], [3, 8, 9]]) np.linalg.eig(B)
矩阵的秩: 用初等行变换将矩阵 A化为阶梯形矩阵, 则矩阵中非零行的个数就定义为这个矩阵的秩, 记为 r ( A ) 。
经过初等变换可知这个方程无解。
import numpy as np X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 2]]) y = np.array([1, 2, 3]) # 查看矩阵秩,输出结果为2 print('矩阵X的秩为:',np.linalg.matrix_rank(X)) # 尝试求解报错,说明方程没有唯一解 np.linalg.solve(X,y)
1.2 满秩矩阵
🚩满秩矩阵(non-singular matrix): 设A 是 n 阶矩阵, 若 r ( A ) = n , 则称 A 为 满秩矩阵。但满秩不局限于n阶矩阵。若矩阵秩等于行数,称为行满秩;若矩阵秩等于列数,称为列满秩。既是行满秩又是列满秩则为n阶矩阵即n阶方阵。
根据初等行变换,可得:
1.3 方程的解
import numpy as np X = np.array([[0, 2, -1], [1, -1, 1], [2, 1, -1]]) y = np.array([1, 0, -2]) # 查看矩阵秩 print('矩阵X的秩为:',np.linalg.matrix_rank(X)) # 尝试求解报错,说明方程没有唯一解 np.linalg.solve(X,y).round(2)
1.4 特征值和特征向量示例
🚩所有特征值的乘积等于 A 的行列式的:
import numpy as np X = np.array([[2, 3, 7], [1, 5, 8], [0, 4, 9]]) # w表示特征值,v表示特征向量 w,v = np.linalg.eig(X) print('矩阵X的行列式:',np.linalg.det(X)) print('特征值累乘值:',np.round(np.real(np.prod(w))))
特征值和特征向量在机器学习中会被用到,像PCA主成分分析,LDA线性判别分析,以及其它算法里面都会用到它的理论和方法。