繁体   English   中英

变量在循环内自行更改

[英]Variable changing by itself inside loop

我有一个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]的减法e[0,t]因为由于某种原因,该减法会导致当前时刻yhat的值?

也许我缺少明显的东西。 我是python的新手,我从MATLAB切换过来。

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

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()函数来创建独立的新副本:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM