[英]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
不会创建副本。 相反,它们是对同一对象的附加引用 。 通过e
或Q
名称更改该对象也将反映在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.