python - numpy,相同的计算不同的结果

标签 python numpy

我想计算this fomula .
我认为结果是 A。
所以我用 numpy 写了一个 python 代码。
但是根据计算顺序,结果不是A。
是什么导致了这个?

import numpy as np
from numpy import *
from numpy.random import *
import decimal

#generate matrix A
A = randn(180,240)
A = np.array(A, dtype = decimal.Decimal )

#generate matrix P
h,w=A.shape
P = randn(0.9*h,h)
P = np.array(P, dtype = decimal.Decimal )

#it's OK. IA = A
PP = dot(P.T,P)
PPinv = np.linalg.inv(PP)
PPinvPP = dot(PPinv,PP)
PPinvPPinv = np.linalg.inv(PPinvPP)
I = dot(PPinvPPinv,PPinvPP)
IA = dot(I, A)

#I think IA2 must be A. but not A. Why?
PA = dot(P,A)
PPA = dot(P.T,PA)
PPinvPPA = dot(PPinv,PPA)
IA2 = dot(PPinvPPinv, PPinvPPA)

#print result
print "A;%0.2f" % A[0,0]
print "IA:%0.2f" % IA[0,0]
print "IA2:%0.2f" % IA2[0,0]

最佳答案

这里发生的事情很有趣:

一般来说,您的公式只有在 PP 是非奇异的情况下才是正确的。

那么为什么 AI == A

PP = dot(P.T,P)
PPinv = np.linalg.inv(PP)
PPinvPP = dot(PPinv,PP)
PPinvPPinv = np.linalg.inv(PPinvPP)
I = dot(PPinvPPinv,PPinvPP)
IA = dot(I, A)

这里有几点需要注意:

  • PP = dot(P.T,P) 是单数
  • => PPinv 不是真正的逆
  • 但是PPinvPP是可逆的,所以I确实是单位矩阵

注意:您只会得到 AI == A,因为您对条款的评估顺序特殊。

IA2 项的第二次计算中,您没有这种特殊的评估顺序,结果是 A

关于python - numpy,相同的计算不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817781/

相关文章:

python - wxpython Gridsizer 不适合面板

python - 在 OSX 10.11 上编译支持 SSL 的 Python 2.7.10

python - 使用 train_test_split 与手动拆分数据时的不同结果

python - 获取包含基本元素的数组的反向切片

python - NumPy 对于涉及数组各个元素的算法的性能

python - 分割大型列表的最有效方法是什么?

python - openCV 阈值负值

python - 返回非平面索引的 numpy 数组的 Argmax

Python 和 Yum 发布 CentOS 5.4

python - 我安装了多个 Ipython 内核,但此后我无法导入 numpy、pandas