numpy / python中的矩阵逆不能给出正确的矩阵?

时间:2017-02-14 20:01:28

标签: python numpy matrix linear-algebra matrix-inverse

我有一个nxn矩阵C,并使用inv中的numpy.linalg来获取Cinverse的反转。我的C矩阵包含订单10**4的元素,但我的Cinverse矩阵包含订单10**12和更高的元素(不确定是否正确)。当我做numpyp.dot(C,Cinverse)时,我没有得到单位矩阵。这是为什么?

我有一个向量x,我自己乘以得到一个矩阵。

x=array([ 121.41191662,   74.22830468,   73.23156336,   75.48354975,
     79.89580817])
c=np.outer(xvector,xvector)

这是一个5x5矩阵。

然后我得到它的逆转

from numpy.linalg import inv
cinverse=inv(c)

然后我想知道我是否可以获得单位矩阵。

identity=np.dot(C00,C00inv)

但是,我没有得到单位矩阵。 cinverse具有非常大的矩阵元素 大约10 ** 13和更高,而c有大约10,000的矩阵元素。

2 个答案:

答案 0 :(得分:1)

两个向量的外积(它们是否相同)可逆。由于它只是一堆相同向量的缩放副本,因此其等级为1。排列有缺陷的矩阵cannot be inverted

我很惊讶numpy没有提出异常或者至少发出警告。

答案 1 :(得分:0)

所以这里有一些生成逆矩阵的代码,之后我会对它进行评论。

import numpy as np
x = np.random.rand(5,5)*10000 # makes a 5x5 matrix with elements around 10000
xin = np.linalg.inv(x)
iden = np.dot(x,xinv)

现在你的iden矩阵的第一行看起来像这样: [ 1.00000000e+00, -2.05382445e-16, -5.61067365e-16, 1.99719718e-15, -2.12322957e-16] 。请注意,第一个元素恰好是1,但是其他元素不完全为0,但是它们基本上为零,根据机器精度应该被视为零。