【问题标题】:Matrix inverse in numpy/python not giving correct matrix?numpy/python中的矩阵逆没有给出正确的矩阵?
【发布时间】:2017-02-14 20:01:27
【问题描述】:

我有一个 nxn 矩阵 C 并使用来自 numpy.linalginv 取反得到 Cinverse。我的Cmatrix 有顺序元素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。

【问题讨论】:

  • 请更具体。你能告诉我们你的输入和输出吗?另外,您使用的代码到底是什么?
  • 你能提供一些带有随机矩阵的示例代码来展示你想要做什么吗?这听起来不对 - 当您说具有 10**4 阶的元素时,这是否意味着该元素的数量就是数字的大小,即 10000ish?啊,胡安帕,打败我;)
  • “我没有得到单位矩阵” - 它与单位矩阵的距离如何?由于舍入误差,您不应该期望一个正好是 1 和 0 的矩阵。
  • 更具体地说,我的矩阵元素的阶数为 10**4。例如,8000,10000,7000....等。我用一些代码编辑了原始帖子。
  • @RexFuzzle 为了清楚起见,我已经编辑了原始帖子。是的,例如,它是一个 5x5 矩阵,元素的大小约为 10000ish。

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


【解决方案1】:

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

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

【讨论】:

  • 这是为什么?如果您查看academic.oup.com/ptep/article/doi/10.1093/ptep/ptu065/1560725/… 的 eqn 14,您会发现我需要两个向量的外积来创建协方差矩阵(我只考虑 l=m=0 的情况)。 Eqn 13 要求我取反
  • @NabeelEh 但我相信你确实得到了数学论证?不管那张纸上说什么。如果您有多个维度,则外积是不可逆的。这是事实。现在,我真的不能指望为您阅读您的论文,但只有这一次:您所拥有的 (14) 不是 外部产品。它是外部产品的sum。显然,如果你添加足够多的 rank 1 矩阵,你可以获得满秩。
  • 我明白了。是的,我明白这个论点。谢谢保罗,感谢您的帮助!
【解决方案2】:

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

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,但它们本质上是零,根据机器精度应该被视为零。

【讨论】:

  • 嗨@RexFuzzle,如果这是我的结果,我会很高兴。我的向量是 x=array([ 4140.56172552, 2561.7498602 , 2529.56826173, 2607.35090233, 2759.5614813 ])。我通过使用 c=np.outer(x,x) 得到我的矩阵,然后使用 cinv=inv(c) 求逆。然后使用 np.dot(c,cinv) 我的第一行是 [ 6.01898362e-01, 5.53081985e+00, 1.79258876e+00, -5.86243807e-01, 1.50883747e+01] 这不是身份
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
相关资源
最近更新 更多