numpy基础--线性代数
2023-03-15 22:51:14 时间
以下代码的前提:import numpy as np
线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。numpy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数)。
矩阵乘法官方说明:numpy.dot — NumPy v1.21 Manual
1 >>> x = np.array([[1, 2, 3], [4, 5, 6]])
2 >>> y = np.array([[1, 2], [3, 4], [5, 6]])
3 >>> x
4 array([[1, 2, 3],
5 [4, 5, 6]])
6 >>> y
7 array([[1, 2],
8 [3, 4],
9 [5, 6]])
10 >>> np.dot(x, y)
11 array([[22, 28],
12 [49, 64]])
13 >>> x.dot(y)
14 array([[22, 28],
15 [49, 64]])
16 >>>
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。
1 >>> from numpy.linalg import inv, qr
2 >>> X = np.arange(9).reshape(3, 3)
3 >>> X
4 array([[0, 1, 2],
5 [3, 4, 5],
6 [6, 7, 8]])
7 >>> mat = X.T.dot(X)
8 >>> mat
9 array([[45, 54, 63],
10 [54, 66, 78],
11 [63, 78, 93]])
12 >>> inv(mat)
13 array([[ 3.51843721e+13, -7.03687442e+13, 3.51843721e+13],
14 [-7.03687442e+13, 1.40737488e+14, -7.03687442e+13],
15 [ 3.51843721e+13, -7.03687442e+13, 3.51843721e+13]])
16 >>> mat.dot(inv(mat))
17 array([[ 0.79296875, 1. , -0.2109375 ],
18 [ 0.1484375 , 1. , -0.046875 ],
19 [-0.74609375, 1. , 0.6171875 ]])
20 >>> q, r = qr(mat)
21 >>> q
22 array([[-0.47673129, 0.77849894, 0.40824829],
23 [-0.57207755, 0.07784989, -0.81649658],
24 [-0.66742381, -0.62279916, 0.40824829]])
25 >>> r
26 array([[-9.43927963e+01, -1.15559666e+02, -1.36726535e+02],
27 [ 0.00000000e+00, -1.40129810e+00, -2.80259620e+00],
28 [ 0.00000000e+00, 0.00000000e+00, 3.55271368e-15]])
29 >>>
下表是常用的numpy.linalg函数。
方法 | 说明 |
---|---|
diag | 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0) |
dot | 矩阵乘法 |
trace | 计算对角线元素的和 |
det | 计算矩阵行列式 |
eig | 计算方阵的本征值和本征向量 |
inv | 计算方阵的逆 |
solve | 解线性方程组Ax=b,其中A为一个方阵 |
lstsq | 计算Ax=b的最小二乘解 |
numpy.diag — NumPy v1.21 Manual
numpy.diag(v, k=0):取矩阵主对角线的值,k=0,取主对角线;k>0,取主对角线之上;k<0,取主对角线之下。
>>> x = np.arange(9).reshape(3, 3)
>>> x
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.diag(x)
array([0, 4, 8])
>>> np.diag(x, k=1)
array([1, 5])
>>> np.diag(x, k=-1)
array([3, 7])
>>> np.diag(np.diag(x))
array([[0, 0, 0],
[0, 4, 0],
[0, 0, 8]])
numpy.trace — NumPy v1.21 Manual
矩阵的迹:矩阵主对角线元素之和。
>>> x = np.eye(3)
>>> x
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> x.trace()
3.0
numpy.linalg.det — NumPy v1.21 Manual
矩阵(必须是方阵)行列式的值:The determinant of a 2-D array [[a, b], [c, d]] is ad - bc:
>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
[3, 4]])
>>> np.linalg.det(a)
-2.0000000000000004
numpy.linalg.eig — NumPy v1.21 Manual
方阵的本征值和本征向量:
>>> from numpy import linalg as LA
>>> x = np.diag((1, 2, 3))
>>> x
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> w, v = LA.eig(x)
>>> w; v
array([1., 2., 3.])
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
numpy.linalg.inv — NumPy v1.21 Manual
矩阵的逆:设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得:AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵。
>>> from numpy.linalg import inv
>>> a = np.array([[1., 2.], [3., 4.]])
>>> a
array([[1., 2.],
[3., 4.]])
>>> ainv = inv(a)
>>> ainv
array([[-2. , 1. ],
[ 1.5, -0.5]])
numpy.linalg.solve — NumPy v1.21 Manual
解线性方程组Ax=b,其中A为一个方阵。
>>> a = np.array([[1, 2], [3, 5]])
>>> b = np.array([1, 2])
>>> x = np.linalg.solve(a, b)
>>> x
array([-1., 1.])
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十