我有一个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的矩阵元素。
答案 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,但是它们基本上为零,根据机器精度应该被视为零。