Python numpy加法错误

Python numpy加法错误,python,numpy,Python,Numpy,使用python中的基本快捷方式方法时,我遇到了一个非常奇怪的错误。看起来,除非我非常愚蠢,否则我会得到不同的A=A+B和A+=B值。下面是我的代码: def variance(phi,sigma,numberOfIterations): variance = sigma for k in range(1,numberOfIterations): phik = np.linalg.matrix_power(phi,k) variance = var

使用python中的基本快捷方式方法时,我遇到了一个非常奇怪的错误。看起来,除非我非常愚蠢,否则我会得到不同的A=A+B和A+=B值。下面是我的代码:

def variance(phi,sigma,numberOfIterations):
    variance = sigma
    for k in range(1,numberOfIterations):
        phik = np.linalg.matrix_power(phi,k)
        variance = variance + phik*sigma*phik.T
    return variance
这基本上只是计算向量自回归的协方差。因此:

phi    = np.matrix('0.7 0.2 -0.1; 0.001 0.8 0.1; 0.001 0.002 0.9')
sigma  = np.matrix('0.07 0.01 0.001; 0.01 0.05 0.004; 0.001 0.004 0.01')
我得到:

variance(phi,sigma,10) = 
[[ 0.1825225   0.07054728  0.00430524]
 [ 0.07054728  0.14837229  0.02659357]
 [ 0.00430524  0.02659357  0.04657858]]
variance(phi,sigma,10) =
[[ 0.34537165  0.20258329  0.04365378]
 [ 0.20258329  0.33471052  0.1529369 ]
 [ 0.04365378  0.1529369   0.19684553]]
我相信这是正确的(与Matlab一致)。现在如果我把上面的行改成

variance += phik*sigma*(phik.T)
我得到:

variance(phi,sigma,10) = 
[[ 0.1825225   0.07054728  0.00430524]
 [ 0.07054728  0.14837229  0.02659357]
 [ 0.00430524  0.02659357  0.04657858]]
variance(phi,sigma,10) =
[[ 0.34537165  0.20258329  0.04365378]
 [ 0.20258329  0.33471052  0.1529369 ]
 [ 0.04365378  0.1529369   0.19684553]]
发生什么事了

非常感谢

罪魁祸首是:

variance = sigma
如果您将其更改为:

variance = sigma.copy()
您将看到正确的结果

这是因为
+=
实际上执行了一个(更有效的)就地加法…并且由于
方差
西格玛
引用了相同的数组,两者都将被更新。例如:

>>> sigma = np.array([1])
>>> variance = sigma
>>> variance += 3
>>> sigma
array([4])

A=A.\uu添加(B)
!=
A=A.。\uu iadd\uu(B)
如果A是可变的,那么在函数的作用域中有一个与函数同名的变量也有点奇怪。