线性代数

函数 描述
dot 两个数组的点积,即元素对应相乘
vdot 两个向量的点积
inner 两个数组的内积
matmul 两个数组的矩阵积
determinant 数组的行列式
solve 求解线性矩阵方程
inv 计算矩阵的乘法逆矩阵

1> numpy.dot()

对于两个一维数组,返回的是两个数组对应下标元素的乘积和(数学上的内积);

对于二维数组,返回的是两个数组的矩阵乘积

语法:

numpy.dot(a, b, out = None)

参数 说明
a ndarray数组
b ndarray 数组
out 可选,用于保存 numpy.dot()函数的计算结果
a_np = np.array([[1, 2],[5, 6]])
b_np = np.array([[11, 15],[17, 19]])
print(np.dot(a_np, b_np))

# 输出结果:
#  [[ 45  53]
#   [157 189]]

2> numpy.vdot()

两个向量的点积;

如果第一个参数是复数,那么它的共轭复数会用于计算;

如果参数是多维数组,则会被展开

a_np = np.array([[1, 2],[5, 6]])
b_np = np.array([[11, 15],[17, 19]])
print(np.vdot(a_np, b_np))  # 输出结果: 240

3> numpy.inner()

返回一维数组的向量内积

inner_np = np.inner(np.array([1, 2, 3]),np.array([1, 3, 4]))
print(f'向量内积:{inner_np}')   # 输出结果:  向量内积:19

a_np = np.array([[1, 2],[5, 6]])
b_np = np.array([[11, 15],[17, 19]])
print(f'数组 a_np 和 b_np的内积:\n{np.inner(a_np,b_np)}')

# 输出结果:
#  数组 a_np 和 b_np的内积:
#  [[ 41  55]
#   [145 199]]

4> numpy.matmul()

返回两个数组的矩阵乘积

a_np = [[1, 2],[5, 6]]
b_np = [[11, 15],[17, 19]]
print(f'矩阵乘积:\n{np.matmul(a_np,b_np)}')

# 输出结果:
#  矩阵乘积:
#  [[ 45  53]
#   [157 189]]

a_np = [[1, 2],[5, 6]]
b_np = [5, 6]
print(f'二维和一维的乘积:{np.matmul(a_np,b_np)}')

# 输出结果:
#  二维和一维的乘积:[17 61]

5> numpy.linalg.det()

用于计算输入矩阵的行列式

b_np = np.array([[6, 1, 1],[4, -2, 5],[2, 8, 7]])
print(f'b_np 的行列式:{np.linalg.det(b_np)}')

# 输出结果:
#  b_np 的行列式:-306.0

6> numpy.linalg.solve()

计算矩阵形式的线性方程的解

a_np = np.array([[1, 1, 1],[0, 2, 5],[2, 5, -1]])
b_np = np.array([[6],[-4],[27]])
print(f'线性方程组的解:\n{np.linalg.solve(a_np,b_np)}')

# 输出结果:
#  线性方程组的解:
#  [[ 5.]
#   [ 3.]
#   [-2.]]

7> numpy.linalg.inv()

计算矩阵的乘法逆矩阵

a_np = np.array([[1, 1, 1],[0, 2, 5],[2, 5, -1]])
print(f'逆矩阵:\n{np.linalg.inv(a_np)}')

# 输出结果:
#  逆矩阵:
#  [[ 1.28571429 -0.28571429 -0.14285714]
#   [-0.47619048  0.14285714  0.23809524]
#   [ 0.19047619  0.14285714 -0.0952381 ]]