numpy中的矩阵逆看似奇怪

时间:2015-12-27 08:38:26

标签: python numpy matrix

我正在尝试实现rabin的信息分散算法,该算法涉及将NxM矩阵乘以文件。所以我需要在整个实现过程中使用矩阵和它们的逆。虽然我开始测试矩阵及其逆的生成。

就我而言,我知道矩阵与其逆的乘法结果必须是一个标识矩阵,即它的主对角线是1并且在其他地方有零。所以我尝试按如下方式生成Vandermonde矩阵:

import numpy as np
from numpy.linalg import inv

x = np.array([1, 2, 3, 5])
x1 = np.vander(x)
x1
array([[  1,   1,   1,   1],
       [  8,   4,   2,   1],
       [ 27,   9,   3,   1],
       [125,  25,   5,   1]])

并计算反函数如下:

x1_inv = inv(x1_inv)
inv(x1_inv)
array([[-0.125     ,  0.33333333, -0.25      ,  0.04166667],
       [ 1.25      , -3.        ,  2.        , -0.25      ],
       [-3.875     ,  7.66666667, -4.25      ,  0.45833333],
       [ 3.75      , -5.        ,  2.5       , -0.25      ]])

到目前为止一直很好,但通过在理论上乘以x1和x1_inv,我会期待如下的单位矩阵:

array([[ 1.,  0.,  0.,  0.],
   [ 0.,  1.,  0.,  0.],
   [ 0.,  0.,  1.,  0.],
   [ 0.,  0.,  0.,  1.]])

但这就是我得到的:

x1_inv.dot(x1)
array([[  1.00000000e+00,   0.00000000e+00,  -1.66533454e-16,
         -1.38777878e-17],
       [  3.55271368e-15,   1.00000000e+00,   4.44089210e-16,
          2.77555756e-17],
       [ -1.42108547e-14,  -1.77635684e-15,   1.00000000e+00,
         -8.32667268e-16],
       [ -7.10542736e-15,  -8.88178420e-16,   2.22044605e-16,
          1.00000000e+00]])

我在主对角线上得到一些,很好,但在其他地方没有零。我在这里错过了什么?令我惊讶的是,当我将假设的单位矩阵与主矩阵相乘时,我得到主矩阵,而我不应该因为所产生的单位矩阵实际上不是一个。

当我尝试np.allclose(x1.dot(inv(x1), np.eye(4))时,我的回复是真的。

我的问题是:我在这里失踪了什么?为什么x1.dot(x1_inv)的结果看起来不像我期望的那样(一个单元矩阵与主对角线上的那些和其他地方的零)?

0 个答案:

没有答案