简介
线性代数是数组中的重要组成部分,它包括矩阵乘法、矩阵分解、行列式和其他方阵运算。
函数 | 描述 |
---|---|
diag() | 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0) |
dot() | 矩阵乘法 |
trace() | 计算对角线元素的和 |
det() | 计算矩阵行列式 |
eig() | 计算方阵的本征值和本征向量 |
inv() | 计算方阵的逆 |
pinv() | 计算矩阵的Moore-Penrose伪逆 |
qr() | 计算QR分解 |
svd() | 计算奇异值分解(SVD) |
solve() | 解线性方程组Ax=b,其中A为一个方阵 |
lstsq() | 计算Ax=b的最小二乘解 |
接下来介绍常用的函数。
dot()函数
该函数既是NumPy的函数,又是一个数组的方法,表示两个数组的点积。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>>>import numpy as np >>>a = np.arange(6).reshape(2, 3) >>>a array([[0, 1, 2], [3, 4, 5]]) >>>b = np.arange(6).reshape(3, 2) >>>b array([[0, 1], [2, 3], [4, 5]]) # numpy函数 >>>np.dot(a, b) array([[10, 13], [28, 40]]) # 数组的方法 >>>a.dot(b) array([[10, 13], [28, 40]]) |
det()函数
该函数能够计算输入矩阵的行列式。
代码演示:
1 2 3 |
>>>import numpy as np >>>a = np.array([[2, 3], [6, 2]]) -14.000000000000004 |
solve()函数
该函数可以计算线性方程的解。
假如有如下方程组:
1 2 3 4 5 |
2x + y = 7 x + 4y = 14 写成矩阵的形式: [[2, 1] [[x] [[7] [1, 4]] * [y]] = [14]] |
为了解出如上方程组,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>>import numpy as np >>>a = np.array([[2, 1], [1, 4]]) >>>a array([[2, 1], [1, 4]]) >>>b = np.array([[7], [14]]) >>>b array([[ 7], [14]]) >>>np.linalg.solve(a, b) array([[2.], [3.]]) |
最后解出x=2,y=3。
inv()函数
计算方阵的逆矩阵。逆矩阵的定义为如果两个方阵A、B,使得AB=BA=E,则A称为可逆矩阵,B为A的逆矩阵,其中E为单位矩阵。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>>import numpy as np >>>a = np.arange(1, 5).reshape(2, 2) >>>a array([[1, 2], [3, 4]]) >>>b = np.linalg.inv(a) array([[-2. , 1. ], [ 1.5, -0.5]]) >>>np.dot(a, b) array([[1.0000000e+00, 0.0000000e+00], [8.8817842e-16, 1.0000000e+00]]) |
之前提到解线性方程,可以使用solve()
函数解ax=b
,同样可以改写成x=a逆矩阵*b
。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 |
>>>import numpy as np >>>a = np.array([[2, 1], [1, 4]]) >>>b = np.array([[7], [14]]) >>>np.linalg.solve(a, b) array([[2.], [3.]]) # 使用逆矩阵运算 >>>x = np.dot(np.linalg.inv(a), b) array([[2.], [3.]]) |
总结
本文介绍了NumPy中处理线性代数的函数。主要介绍了矩阵点积、行列式、解线性方程和求方阵的逆。它们跟MATLAB和R等语言使用的都是行业标准级Fortran库,因此,通过NumPy能够实现丰富的矩阵运算,大家有需要可以深入的学习。