Ich habe eine Python for
Schleife, die eine Variable zu haben scheint, die sich innerhalb der Schleife ändert. Meine Variablen sind definiert als:Variablenwechsel von sich aus innerhalb der Schleife
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
Die Schleife ist: (prices
ist ein Datenrahmen)
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
ich drucke yhat
, weil ich die Anomalie in den Code unten, um es verengt haben. Nachdem der Wert von yhat
@ t festgelegt wurde, scheint es sich zu ändern. Wenn ich den Code ausführen, druckt es aus:
0.0
0.001
20.438747
Außerdem, ich bin besorgt über die Subtraktion für e[0,t]
weil aus irgendeinem Grunde der Subtraktion ergibt den Wert von yhat
in diesem gegenwärtigen Moment?
Vielleicht vermisse ich etwas offensichtlich offensichtlich. Ich bin relativ neu bei Python, und ich wechselte von MATLAB.
BEARBEITEN: x & y sind auch Matrixobjekte. Also sind alle Multiplikationen Matrix-Punkt-Produkte.
Schöne. Jetzt funktioniert der Kalman-Filter wie ein Traum. Ist das jetzt nur eine Nuance? Oder gibt es das gleiche Ergebnis mit einem Pandas Datenrahmen? – denbjornen505
@ denbjouren505: Dies ist eine * Python * Nuance; Namen sind * Label *, Referenzen auf ein Objekt. Sie können beliebig viele Beschriftungen an ein Objekt anhängen. –
@ denbjouren505: siehe http://nedbatchelder.com/text/names.html für einen tollen Artikel und eine Präsentation darüber, wie Namen in Python funktionieren. –