我有一个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也是矩阵对象。因此,所有乘法都是矩阵点乘积。
答案 0 :(得分:3)
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()
function代替创建独立的新副本:
e, Q = np.copy(yhat), np.copy(yhat)