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 = 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]]

我相信这是正确的(同意 Matlab)。现在,如果我将上面的行更改为

variance += phik*sigma*(phik.T)

我得到:

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()

您会看到正确的结果。

这是因为 += 实际上执行了一个(更有效的)就地加法……而且由于 variancesigma 引用相同数组,两者 都会更新。例如:

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

关于Python numpy 添加错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907917/

相关文章:

python - 如何将数组从 dtype=object 转换为 dtype=np.int

python - 将 4 个一对一映射列表转换为字典列表(python)

python - 异常处理 - 通过嵌套或循环再次运行函数?

python - 覆盖 Numpy 数组中的元素

python - 如何检查数据框中的一列是否完全等于另一个数据框中的列

python - 检索 numpy 数组中具有特定值的随机项的索引

python - 如何通过两个日期列对 Pandas 数据框进行排序

python - Django,使用 "|": Expression tree is too large (maximum depth 1000)

python - 无法回滚带有 MySQL 非事务性更改表的 Django

python - 带有 Django 的 Amazon SES SMTP