如何在python中计算大规模逆矩阵

如何在python中计算大规模逆矩阵,python,numpy,matrix,Python,Numpy,Matrix,正如我们所知,我们可以用numpy计算逆矩阵,如下所示 matrix1 = np.matrix([[8,2,5],[7,3,1],[4,9,6]]) inverse_matrix1 = matrix1.I result = np.matmul(matrix1, inverse_matrix1) matrix([[ 1.00000000e+00, 0.00000000e+00, 2.77555756e-17], [ 0.00000000e+00, 1.00000000e+00,

正如我们所知,我们可以用numpy计算逆矩阵,如下所示

matrix1 = np.matrix([[8,2,5],[7,3,1],[4,9,6]])
inverse_matrix1 = matrix1.I
result = np.matmul(matrix1, inverse_matrix1)
matrix([[ 1.00000000e+00,  0.00000000e+00,  2.77555756e-17],
    [ 0.00000000e+00,  1.00000000e+00,  3.46944695e-17],
    [-2.22044605e-16,  0.00000000e+00,  1.00000000e+00]])
结果如下所示,我们很容易通过简单的np.matmul检查精度

matrix([[ 0.03585657,  0.1314741 , -0.05179283],
    [-0.15139442,  0.11155378,  0.10756972],
    [ 0.20318725, -0.25498008,  0.03984064]])
检查结果如下所示

matrix1 = np.matrix([[8,2,5],[7,3,1],[4,9,6]])
inverse_matrix1 = matrix1.I
result = np.matmul(matrix1, inverse_matrix1)
matrix([[ 1.00000000e+00,  0.00000000e+00,  2.77555756e-17],
    [ 0.00000000e+00,  1.00000000e+00,  3.46944695e-17],
    [-2.22044605e-16,  0.00000000e+00,  1.00000000e+00]])
然而,这种情况非常小。在实践中,虽然我们应该避免计算大型矩阵的逆矩阵,但有时我们必须这样做。我找到了那个矩阵。当矩阵相对较大时,我无法提供一个相对精确的逆矩阵。示例如下所示。我想计算形状为(300300)的高斯核矩阵的逆矩阵


我不知道如何计算这样的矩阵。非常感谢你

示例之间结果的差异不是由于矩阵的大小,而是由于秩。第一个矩阵是满秩矩阵

>>> matrix_rank(matrix1)
3  ## Shape of the matrix
矩阵的形状),而在第二种情况下,矩阵的秩为19

>>> matrix_rank(kernel_matrix_np)
19   ## Much less than the shape of the matrix
在这种情况下,无法恢复原始矩阵-需要一个满秩矩阵。正如@Brella所提到的,这反映在条件编号中。粗略地说,条件数中的每个数量级代表一位数的精度损失

>>> cond(kernel_matrix_np)
1.9605027391309521e+19

在使用矩阵进行任何计算时,都需要检查这两件事,通常其中一件会指出问题所在。最后,在某些情况下,使用
pinv
代替
inv
会产生稍好的结果,尽管在这种情况下这不起作用,因为矩阵不是满秩。

numpy.matrix
及其方法应被视为不推荐使用,请改用数组。尝试我不期望它会有显著的改善,但SciPy更有可能被微调。浮点数的双重精度限制了人们处理大型不适定问题的能力。我认为你的条件数太大了。你可以计算这样的矩阵,但由于舍入误差,你不应该感谢你的贡献!非常感谢你!由于我的疏忽,我没有注意到我的矩阵是否具有逆矩阵。