Python 中的矩阵逆运算
-
在 Python 中使用
numpy.linalg.inv()
函数求矩阵的逆 -
在 Python 中使用
numpy.matrix
类求矩阵的逆 -
在 Python 中使用
scipy.linalg.inv()
函数求逆矩阵 - 在 Python 中创建用户定义的函数以求矩阵的逆矩阵
矩阵是具有相同大小的每个元素的二维数组。我们可以使用 numpy
数组或嵌套列表来表示矩阵。
对于行列式不为零的非奇异矩阵,存在一个唯一矩阵,当与原始矩阵相乘时,该矩阵会产生一个单位矩阵。这个唯一的矩阵称为原始矩阵的逆矩阵。
本教程将演示如何使用多种方法在 Python 中对矩阵求逆。
在 Python 中使用 numpy.linalg.inv()
函数求矩阵的逆
numpy
模块具有在 Python 中创建和操作数组的不同功能。numpy.linalg
子模块实现了不同的线性代数算法和函数。
我们可以使用该模块中的 numpy.linalg.inv()
函数来计算给定矩阵的逆矩阵。如果矩阵的逆是不可能的,则此函数会引发错误,这可能是因为矩阵是奇异的。
因此,建议在 try
和 except
块中使用此功能。如果矩阵是奇异的,则会引发错误,并执行 except
块中的代码。
代码片段:
import numpy as np
try:
m = np.array([[4, 3], [8, 5]])
print(np.linalg.inv(m))
except:
print("Singular Matrix, Inverse not possible.")
输出:
[[-1.25 0.75]
[ 2. -1. ]]
在 Python 中使用 numpy.matrix
类求矩阵的逆
很长一段时间以来,numpy.matrix
类被用来表示 Python 中的矩阵。这与使用普通二维数组进行矩阵表示相同。
numpy.matrix
对象具有属性 numpy.matrix.I
计算给定矩阵的逆矩阵。如果使用奇异矩阵,也会引发错误。
代码片段:
import numpy as np
try:
m = np.matrix([[4, 3], [8, 5]])
print(m.I)
except:
print("Singular Matrix, Inverse not possible.")
输出:
[[-1.25 0.75]
[ 2. -1. ]]
虽然这两种方法在内部工作相同,但不鼓励使用 numpy.matrix
类。这是因为它在使用 numpy
数组时已被弃用且模棱两可。
在 Python 中使用 scipy.linalg.inv()
函数求逆矩阵
我们可以使用 scipy
模块使用其功能执行不同的科学计算。它也适用于 numpy
数组。
scipy.linalg.inv()
还可以返回 Python 中给定方阵的逆。它的工作方式与 numpy.linalg.inv()
函数相同。
代码片段:
import numpy as np
from scipy import linalg
try:
m = np.matrix([[4, 3], [8, 5]])
print(linalg.inv(m))
except:
print("Singular Matrix, Inverse not possible.")
输出:
[[-1.25 0.75]
[ 2. -1. ]]
在 Python 中创建用户定义的函数以求矩阵的逆矩阵
我们可以在 Python 中实现计算逆矩阵的数学逻辑。为此,我们将使用一系列用户定义的函数。
我们将创建不同的函数来返回行列式、转置和矩阵行列式。这些函数将用于返回最终逆的函数中。
当我们在 Python 中将矩阵表示为列表列表时,此方法有效。
代码片段:
def return_transpose(mat):
return map(list, zip(*mat))
def return_matrix_minor(mat, i, j):
return [row[:j] + row[j + 1 :] for row in (mat[:i] + mat[i + 1 :])]
def return_determinant(mat):
if len(mat) == 2:
return mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]
determinant = 0
for c in range(len(m)):
determinant += (
((-1) ** c) * m[0][c] * return_determinant(return_matrix_minor(m, 0, c))
)
return determinant
def inverse_matrix(m):
determinant = return_determinant(m)
if len(m) == 2:
return [
[m[1][1] / determinant, -1 * m[0][1] / determinant],
[-1 * m[1][0] / determinant, m[0][0] / determinant],
]
cfs = []
for r in range(len(m)):
cfRow = []
for c in range(len(m)):
minor = return_matrix_minor(m, r, c)
cfRow.append(((-1) ** (r + c)) * return_determinant(minor))
cfs.append(cfRow)
cfs = return_transpose(cfs)
for r in range(len(cfs)):
for c in range(len(cfs)):
cfs[r][c] = cfs[r][c] / determinant
return cfs
m = [[4, 3], [8, 5]]
print(inverse_matrix(m))
输出:
[[-1.25, 0.75], [2.0, -1.0]]
上面的示例返回一个嵌套列表,表示给定矩阵的逆矩阵。
最后,我们讨论了几种在 Python 中求逆矩阵的方法。numpy
和 scipy
模块具有计算矩阵逆的 linalg.inv()
函数。
我们还可以使用 numpy.matrix
类来查找矩阵的逆矩阵。最后,我们讨论了一系列用户定义的函数,它们通过实现算术逻辑来计算逆。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn