6

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

どうしたの?

どうもありがとう

ダン

4

1 に答える 1

7

犯人は次のとおりです。

variance = sigma

それを次のように変更すると:

variance = sigma.copy()

正しい結果が表示されます。

これは、+=実際には (より効率的な) インプレース加算を実行するためです。両方とも同じ配列varianceを参照するため、両方が更新されます。例えば:sigma

>>> sigma = np.array([1])
>>> variance = sigma
>>> variance += 3
>>> sigma
array([4])
于 2012-06-06T04:06:15.287 に答える