pykalman

An implementation of the Kalman Filter, Kalman Smoother, and EM algorithm in Python


Keywords
kalman, filter, smoothing, em, expectation-maximization, hmm, tracking, unscented
License
Other
Install
pip install pykalman==0.10.1

Documentation

Welcome to pykalman

the dead-simple Kalman Filter, Kalman Smoother, and EM library for Python.

pykalman is a Python library for Kalman filtering and smoothing, providing efficient algorithms for state estimation in time series. It includes tools for linear dynamical systems, parameter estimation, and sequential data modeling. The library supports the Kalman Filter, Unscented Kalman Filter, and EM algorithm for parameter learning.

🚀 Version 0.10.1 out now! Check out the release notes here.

Documentation · Tutorials
Open Source BSD 3-clause
Community !discord !LinkedI
Code !pypi !python-versions !black
Downloads PyPI - Downloads PyPI - Downloads Downloads

💬 Where to ask questions

Questions and feedback are extremely welcome! We strongly believe in the value of sharing help publicly, as it allows a wider audience to benefit from it.

Type Platforms
🐛 Bug Reports GitHub Issue Tracker
Feature Requests & Ideas GitHub Issue Tracker
👩‍💻 Usage Questions Stack Overflow
💬 General Discussion Discord
🏭 Contribution & Development dev-chat channel · Discord
🌐 Meet-ups and collaboration sessions Discord - Fridays 13 UTC, dev/meet-ups channel

⏳ Install pykalman

  • Operating system: macOS X · Linux · Windows 8.1 or higher
  • Python version: Python 3.9, 3.10, 3.11, 3.12, and 3.13
  • Package managers: pip

For a quick installation::

pip install pykalman

Alternatively, you can setup from source:

pip install .

⚡ Usage

from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

Also included is support for missing measurements:

from numpy import ma
measurements = ma.asarray(measurements)
measurements[1] = ma.masked   # measurement at timestep 1 is unobserved
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

And for the non-linear dynamics via the UnscentedKalmanFilter:

from pykalman import UnscentedKalmanFilter
ukf = UnscentedKalmanFilter(lambda x, w: x + np.sin(w), lambda x, v: x + v, transition_covariance=0.1)
(filtered_state_means, filtered_state_covariances) = ukf.filter([0, 1, 2])
(smoothed_state_means, smoothed_state_covariances) = ukf.smooth([0, 1, 2])

And for online state estimation:

for t in range(1, 3):
    filtered_state_means[t], filtered_state_covariances[t] = \
            kf.filter_update(filtered_state_means[t-1], filtered_state_covariances[t-1], measurements[t])

And for numerically robust "square root" filters

from pykalman.sqrt import CholeskyKalmanFilter, AdditiveUnscentedKalmanFilter
kf = CholeskyKalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
ukf = AdditiveUnscentedKalmanFilter(lambda x, w: x + np.sin(w), lambda x, v: x + v, observation_covariance=0.1)

Examples

Examples of all of pykalman's functionality can be found here.