变量在循环

时间:2016-07-24 12:44:42

标签: python loops variables matrix

我有一个python for循环,似乎在循环中有一个变量自己的变化。我的变量定义为:

yhat = np.empty((1,len(prices)))
yhat[:] = nan
yhat = yhat.astype('float')
e = Q = yhat

P = R = np.matrix(np.zeros((2,2)))
B = np.empty((2,len(prices)))
B[:] = nan
B = np.matrix(B)

B[:,0] = 0

循环是:(prices是数据帧)

for t in xrange(0,len(prices),1):

    if t > 0:
        B[:,t] = B[:,t-1]
        R = P+Vw


    yhat[0,t] = x[t,:]*B[:,t]
    print yhat[0,t]

    Q[0,t] = x[t,:]*R*x[t,:].T + Ve
    print yhat[0,t]

    e[0,t] = y[t,0] - yhat[0,t]
    print yhat[0,t]

    K = (R*x[t,:].T)/Q[0,t]

    B[:,t] = B[:,t]+K*e[0,t]


    P = R - K*x[t,:]*R

我正在打印yhat因为我已经将代码中的异常缩小到了它。设置yhat @ t的值后,它似乎发生了变化。当我运行代码时,它打印出来:

0.0
0.001
20.438747

此外,我担心e[0,t]的减法因为某些原因导致减法在当前时刻产生yhat的值?

也许我错过了一些明显的东西。我是python的新手,我从MATLAB切换。

编辑:x& y也是矩阵对象。因此,所有乘法都是矩阵点乘积。

1 个答案:

答案 0 :(得分:3)

e = Q = yhat无法创建副本。它们是对同一对象的附加引用。通过eQ名称更改该对象也会反映出通过yhat引用可见的更改。

所以

yhat[0,t] = x[t,:]*B[:,t]

Q[0,t] = x[t,:]*R*x[t,:].T + Ve

e[0,t] = y[t,0] - yhat[0,t]

所有操作都在同一个numpy数组对象上,而不是在单独的对象上。

使用numpy.copy() function代替创建独立的新副本:

e, Q = np.copy(yhat), np.copy(yhat)