ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

23.NumPy线性代数

2022-08-02 17:33:41  阅读:121  来源: 互联网

标签:23 numpy 矩阵 print 线性代数 数组 np NumPy dot


NumPy 提供了 numpy.linalg 模块,该模块中包含了一些常用的线性代数计算方法,下面对常用函数做简单介绍:

NumPy线性代数函数
函数名称 描述说明
dot 两个数组的点积。
vdot 两个向量的点积。
inner 两个数组的内积。
matmul 两个数组的矩阵积。
det 计算输入矩阵的行列式。
solve 求解线性矩阵方程。
inv 计算矩阵的逆矩阵,逆矩阵与原始矩阵相乘,会得到单位矩阵。

numpy.dot()

按照矩阵的乘法规则,计算两个矩阵的点积运算结果。当输入一维数组时返回一个结果值,若输入的多维数组则同样返回一个多维数组结果。

输入一维数组,示例如下:

  1. import numpy as np
  2. A=[1,2,3]
  3. B=[4,5,6]
  4. print(np.dot(A,B))

输出结果:

32

输入二维数组时,示例如下:

  1. import numpy as np
  2. a = np.array([[100,200],
  3. [23,12]])
  4. b = np.array([[10,20],
  5. [12,21]])
  6. dot = np.dot(a,b)
  7. print(dot)

输出结果:

[[3400 6200]
[ 374  712]]

对于上述输出结果,它的计算过程如下:

[[100*10+200*12,100*20+200*21]

[23*10+12*12,23*20+12*21]]

点积运算就是将 a 数组的每一行元素与 b 数组的每一列元素相乘再相加。

numpy.vdot()

该函数用于计算两个向量的点积结果,与 dot() 函数不同。

  1. import numpy as np
  2. a = np.array([[100,200],[23,12]])
  3. b = np.array([[10,20],[12,21]])
  4. vdot = np.vdot(a,b)
  5. print(vdot)

输出结果:

5528

numpy.inner()

inner() 方法用于计算数组之间的内积。当计算的数组是一维数组时,它与 dot() 函数相同,若输入的是多维数组则两者存在不同,下面看一下具体的实例。

  1. import numpy as np
  2. A=[[1 ,10],
  3.     [100,1000]]
  4. B=[[1,2],
  5.     [3,4]]
  6. #inner函数
  7. print(np.inner(A,B))
  8. #dot函数
  9. print(np.dot(A,B))

输出结果:

[[  21   43]
[2100 4300]]

[[  31   42]
[3100 4200]]

inner() 函数的计算过程是 A 数组的每一行与 B 数组的每一行相乘再相加,如下所示:

[[1*1+2*10  1*3+10*4 ]
[100*1+1000*2  100*3+1000*4]]

dot() 则表示是 A 数组每一行与 B 数组的每一列相乘。

numpy.matmul()

该函数返回两个矩阵的乘积,假如两个矩阵的维度不一致,就会产生错误。

  1. import numpy as np
  2. a = np.array([[1,2,3],[4,5,6],[7,8,9]])
  3. b = np.array([[23,23,12],[2,1,2],[7,8,9]])
  4. mul = np.matmul(a,b)
  5. print(mul)

输出结果:

[[ 48  49  43]
[144 145 112]
[240 241 181]]

numpy.linalg.det()

该函数使用对角线元素来计算矩阵的行列式,计算 2*2(两行两列) 的行列式,示例如下:

[[1,2],
 [3,4]]

通过对角线元素求行列式的结果(口诀:“一撇一捺”计算法):

1*4-2*3=-2

我们可以使用 numpy.linalg.det() 函数来完成计算。示例如下:

  1. import numpy as np
  2. a = np.array([[1,2],[3,4]])
  3. print(np.linalg.det(a))

输出结果:

-2.0000000000000004

numpy.linalg.solve()

该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解,如下所示:

  1. 3X + 2 Y + Z = 10
  2. X + Y + Z = 6
  3. X + 2Y - Z = 2

首先将上述方程式转换为矩阵的表达形式:

方程系数矩阵:
3   2   1 
1   1   1 
1   2  -1
方程变量矩阵:
X 
Y 
Z  
方程结果矩阵:
10 
6
2

如果用  m 、x、n 分别代表上述三个矩阵,其表示结果如下:

m*x=n 或 x=n/m

系数矩阵结果矩阵传递给 numpy.solve() 函数,即可求出线程方程的解,如下所示:

  1. import numpy as np
  2. m = np.array([[3,2,1],[1,1,1],[1,2,-1]])
  3. print ('数组 m:')
  4. print (m)
  5. print ('矩阵 n:')
  6. n = np.array([[10],[6],[2]])
  7. print (n)
  8. print ('计算:m^(-1)n:')
  9. x = np.linalg.solve(m,n)
  10. print (x)

输出结果:

x为线性方程的解:
[[1.]
[2.]
[3.]]

numpy.linalg.inv()

该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。示例如下:

  1. import numpy as np
  2. a = np.array([[1,2],[3,4]])
  3. print("原数组:",a)
  4. b = np.linalg.inv(a)
  5. print("求逆:",b)

输出结果:

原数组:
[[1 2]
[3 4]]
求逆:
[[-2.   1. ]
[ 1.5 -0.5]]

标签:23,numpy,矩阵,print,线性代数,数组,np,NumPy,dot
来源: https://www.cnblogs.com/55zjc/p/16544522.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有