Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NumPy如何计算矩阵的逆?_Python_Numpy_Linear Algebra - Fatal编程技术网

Python NumPy如何计算矩阵的逆?

Python NumPy如何计算矩阵的逆?,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,给定一个方阵a作为数组,如 将numpy导入为np A=np.array( [ [1, 2, 3], [3, 4, 6], [7, 8, 9], ] ) NumPy在运行时内部使用哪种算法 np.linalg.inv(A) 调用以计算A 特别是,由于矩阵求逆可能在数值上不稳定(取决于矩阵的形状),是否根据某些矩阵属性考虑了特殊情况?以下@projjal的评论,所有这些都相当于计算平方矩阵的逆: import numpy as np from scipy.linalg import lu_fa

给定一个方阵
a
作为数组,如

将numpy导入为np
A=np.array(
[
[1, 2, 3],
[3, 4, 6],
[7, 8, 9],
]
)
NumPy在运行时内部使用哪种算法

np.linalg.inv(A)
调用以计算
A


特别是,由于矩阵求逆可能在数值上不稳定(取决于矩阵的形状),是否根据某些矩阵属性考虑了特殊情况?

以下@projjal的评论,所有这些都相当于计算平方矩阵的逆:

import numpy as np
from scipy.linalg import lu_factor, lu_solve

A = np.array([[1, 2, 3],[3, 4, 6],[7, 8, 9]])

A_inv_1 = np.linalg.inv(A)

A_inv_2 = np.linalg.solve(A,np.eye(A.shape[0]))

A_LU = lu_factor(A) # this way, you can potentially reuse the factorization for different RHS
A_inv_3 = lu_solve(A_LU,np.eye(A.shape[0]))

# check
np.allclose(A_inv_1,A_inv_2)
>>> True
np.allclose(A_inv_1,A_inv_3)
>>> True

您可能应该注意到,在numpy源代码的深处(请参阅),inv例程试图从系统LAPACK包调用dgetrf函数,然后执行原始矩阵的LU分解

您可以查看代码中第1036行的注释,其中说明:

/*在linalg包中,行列式是通过LU因子分解计算的
*使用LAPACK。
*slogdet计算符号+对数(行列式)。
*det计算符号*exp(slogdet)。
*/
/**开始重复
#类型=浮点、双精度、CFLOAT、CDOUBLE#
#典型值=npy\U浮动、npy\U双精度、npy\U浮动、npy\U双精度#
#basetyp=npy\U浮点、npy\U双精度、npy\U浮点、npy\U双精度#
#cblas_类型=s、d、c、z#

*/
它使用@projjal中所述的LU分解:感谢您的评论!你介意回答这个问题吗?这样我就可以接受它,让其他读者更容易阅读了。谢谢你,我在查看链接中的来源,找到了评论部分。很高兴你问这个问题。我也知道了这件事。