Skip to content

Commit b6e4db4

Browse files
Solve instead of inverse in kalman step
1 parent 54528a8 commit b6e4db4

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

pymc_experimental/statespace/filters/kalman_filter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -642,15 +642,15 @@ def update(self, a, P, y, c, d, Z, H, all_nan_flag):
642642
PZT = P.dot(Z.T)
643643
F = Z.dot(PZT) + stabilize(H, self.cov_jitter)
644644

645-
F_inv = pt.linalg.solve(F, self.eye_endog, assume_a="pos", check_finite=False)
646-
647-
K = PZT.dot(F_inv)
645+
K = pt.linalg.solve(F.T, PZT.T, assume_a="pos", check_finite=False).T
648646
I_KZ = self.eye_states - K.dot(Z)
649647

650648
a_filtered = a + K.dot(v)
651649
P_filtered = quad_form_sym(I_KZ, P) + quad_form_sym(K, H)
652650

653-
inner_term = matrix_dot(v.T, F_inv, v)
651+
F_inv_v = pt.linalg.solve(F, v, assume_a="pos", check_finite=False)
652+
inner_term = v.T @ F_inv_v
653+
654654
F_logdet = pt.log(pt.linalg.det(F))
655655

656656
ll = pt.switch(

0 commit comments

Comments
 (0)