Python进阶编程:编写更高效、优雅的Python代码
上QQ阅读APP看书,第一时间看更新

1.4.6 矩阵与线性代数运算

在涉及科学计算时,我们经常需要执行矩阵和线性代数运算,比如矩阵乘法、寻找行列式、求解线性方程组等。NumPy库中有一个矩阵对象,其可以用来处理类似问题。矩阵类似于数组对象,但是遵循线性代数的计算规则。以下示例展示了矩阵的一些基本特性:


import numpy as np
m = np.matrix([[1,-2,3],[0,4,5],[7,8,-9]])
print(f'm is:\n{m}')
print(f'm.T is:\n{m.T}')
print(f'm.I is:\n{m.I}')

v = np.matrix([[2],[3],[4]])
print(f'v is:\n{v}')
print(f'm * v is:\n{m * v}')

执行py文件,输出结果如下:


m is:
[[ 1 -2  3]
 [ 0  4  5]
 [ 7  8 -9]]
m.T is:
[[ 1  0  7]
 [-2  4  8]
 [ 3  5 -9]]
m.I is:
[[ 0.33043478 -0.02608696  0.09565217]
 [-0.15217391  0.13043478  0.02173913]
 [ 0.12173913  0.09565217 -0.0173913 ]]
v is:
[[2]
 [3]
 [4]]
m * v is:
[[ 8]
 [32]
 [ 2]]

我们可以在numpy.linalg子包中找到更多的操作函数,示例如下:


import numpy.linalg
print(f'numpy.linalg.det(m) is:\n{numpy.linalg.det(m)}')
print(f'numpy.linalg.eigvals(m) is:\n{numpy.linalg.eigvals(m)}')
x = numpy.linalg.solve(m, v)
print(f'x is:\n{x}')
print(f'm * x is:\n{m * x}')
print(f'v is:\n{v}')

执行py文件,输出结果如下:


numpy.linalg.det(m) is:
-229.99999999999983
numpy.linalg.eigvals(m) is:
[-13.11474312   2.75956154   6.35518158]
x is:
[[0.96521739]
 [0.17391304]
 [0.46086957]]
m * x is:
[[2.]
 [3.]
 [4.]]
v is:
[[2]
 [3]
 [4]]

线性代数是一个非常大的主题,已经超出了本书讨论的范围。但如果需要操作数组和向量,NumPy是一个不错的入口点。