Numpy提供了numpy.linalg
模块,该模块包含了一些常用的线性代数计算方法。
函数名称 | 描述说明 |
---|---|
dot | 两个数组的点积。 |
vdot | 两个向量的点积。 |
inner | 两个数组的内积。 |
matmul | 两个数组的矩阵积。 |
det | 计算输入矩阵的行列式。 |
solve | 求解线性矩阵方程。 |
inv | 计算矩阵的逆矩阵,逆矩阵与原始矩阵相乘,会得到单位矩阵。 |
dot()
点积运算
点积运算就是将 a
数组的每一行元素与 b
数组的每一列元素相乘再相加。**dot()**
按照矩阵的乘法规则,计算两个矩阵的点积运算结果。
A = [1, 2, 3] B = [4, 5, 6] print(np.dot(A, B))
输出结果如下:
“”” 32 “””
二维数组形式
import numpy as np
a = np.array([[100, 200], [23, 12]]) b = np.array([[10, 20], [12, 21]]) dot = np.dot(a, b) print(dot)
输出结果如下:
“”” [[3400 6200] [ 374 712]] “””
计算过程如下:
“”” [[10010+20012 10020+20021]
[2310+1212 2320+1221]] “””
<a name="XSfcv"></a>
# `vdot()`向量点积运算
**向量点积运算**就是**对两个向量对应位的数据相乘后求和的结果**。<br />`vdot()`用于**计算两个向量的点积结果**。
```python
import numpy as np
a = np.array([[100, 200], [23, 12]])
b = np.array([[10, 20], [12, 21]])
vdot = np.vdot(a, b)
print(vdot)
# 输出结果如下:
"""
5528
"""
inner()
计算内积
inner()
函数的计算过程是a
数组的每一行元素与b
数组的每一行元素相乘后相加。inner()
方法用于计算数组之间的内积。
- 输入的是一维数组时,与
dot()
函数相同; - 输入的是多维数组时,则与
dot()
函数不同。 ```python import numpy as np
A = [[1, 10], [100, 1000]] B = [[1, 2], [3, 4]]
inner函数
print(np.inner(A, B))
dot函数
print(np.dot(A, B))
输出结果如下:
“”” [[ 21 43] [2100 4300]] [[ 31 42] [3100 4200]] “””
计算过程如下:
“”” [[11+210 13+104 ] [1001+10002 1003+10004]] “””
<a name="FEPCq"></a>
# `matmul()`返回乘积
`matmul()`函数**返回两个矩阵的乘积**。
- 若两个矩阵的**维度不一致,会产生错误**。
```python
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[23, 23, 12], [2, 1, 2], [7, 8, 9]])
mul = np.matmul(a, b)
print(mul)
# 输出结果如下:
"""
[[ 48 49 43]
[144 145 112]
[240 241 181]]
"""
linalg.det()
计算矩阵的行列式
矩阵的行列式指的是通过减去两个对角线元素(左对角线-右对角线)的乘积后的结果。linalg.det()
函数使用对角线元素来计算矩阵的行列式。
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(np.linalg.det(a))
# 输出结果如下:
"""
-2.0000000000000004
"""
linalg.solve()
计算线性矩阵方程组
该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解。
# 方程式:
3X + 2 Y + Z = 10
X + Y + Z = 6
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
将系数矩阵与结果矩阵传递给linalg.solve()
函数,即可求出线性矩阵方程组的解。
import numpy as np
m = np.array([[3, 2, 1], [1, 1, 1], [1, 2, -1]])
print('数组 m:')
print(m)
print('矩阵 n:')
n = np.array([[10], [6], [2]])
print(n)
print('计算:m^(-1)n:')
x = np.linalg.solve(m, n)
print(x)
# 输出结果如下:
"""
数组 m:
[[ 3 2 1]
[ 1 1 1]
[ 1 2 -1]]
矩阵 n:
[[10]
[ 6]
[ 2]]
计算:m^(-1)n:
[[1.]
[2.]
[3.]]
"""
linalg.inv()
计算矩阵的逆矩阵
该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。
import numpy as np
a = np.array([[1, 2], [3, 4]])
print("原数组:", a)
b = np.linalg.inv(a)
print("求逆:", b)
# 输出结果如下:
"""
原数组: [[1 2]
[3 4]]
求逆: [[-2. 1. ]
[ 1.5 -0.5]]
"""