线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。下面函数都在linalg中
函数 | 描述 |
---|---|
diag() | 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0) |
dot() | 矩阵乘法 |
trace() | 计算对角线元素的和 |
det() | 计算矩阵行列式 |
eig() | 计算方阵的本征值和本征向量 |
inv() | 计算方阵的逆 |
pinv() | 计算矩阵的Moore-Penrose伪逆 |
qr() | 计算QR分解 |
svd() | 计算奇异值分解(SVD) |
solve() | 解线性方程组Ax=b,其中A为一个方阵 |
lstsq() | 计算Ax=b的最小二乘解 |
点乘 dot 的用法
x = np.random.rand(3,4)
y = np.random.rand(4,3) #x的列要等于y的行
x @ y #一共有三种方法
np.dot(x,y)
x.dot(y)
array([[0.47105057, 1.44463688, 0.88234223],
[0.72455672, 1.19400048, 0.66352837],
[0.55268965, 1.22327881, 0.74436165]])
矩阵的逆
X = np.random.randn(5,5)
Y = np.linalg.inv(X)
X @ Y
- 注意必须是方阵不然会报 the array must be square 的 错误
array([[ 1.00000000e+00, 2.77555756e-17, -1.11022302e-16,
-4.16333634e-17, 1.11022302e-16],
[-2.22044605e-16, 1.00000000e+00, 0.00000000e+00,
4.16333634e-17, 6.66133815e-16],
[ 0.00000000e+00, -5.55111512e-17, 1.00000000e+00,
4.16333634e-17, 1.11022302e-16],
[ 0.00000000e+00, 4.44089210e-16, 0.00000000e+00,
1.00000000e+00, 2.22044605e-16],
[-5.55111512e-17, -8.32667268e-17, 1.94289029e-16,
-6.93889390e-17, 1.00000000e+00]])