Skip to main content

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

Project description

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.

:rocket: 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

:speech_balloon: 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: Bug Reports GitHub Issue Tracker
:sparkles: Feature Requests & Ideas GitHub Issue Tracker
:woman_technologist: Usage Questions Stack Overflow
:speech_balloon: General Discussion Discord
:factory: Contribution & Development dev-chat channel · Discord
:globe_with_meridians: Meet-ups and collaboration sessions Discord - Fridays 13 UTC, dev/meet-ups channel

:hourglass_flowing_sand: 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 .

:zap: 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pykalman-0.10.1.tar.gz (240.7 kB view details)

Uploaded Source

Built Distribution

pykalman-0.10.1-py2.py3-none-any.whl (248.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pykalman-0.10.1.tar.gz.

File metadata

  • Download URL: pykalman-0.10.1.tar.gz
  • Upload date:
  • Size: 240.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for pykalman-0.10.1.tar.gz
Algorithm Hash digest
SHA256 c3019211d6551f6a84e9f08d3a6d11d5ace95d544e361b9cecc633041f74c139
MD5 18eaa3209f56b66538b937127021ba93
BLAKE2b-256 2f177d43c93b06dec3070f9c38c594dfc10eb87978b86169bd5769cc034f2dc7

See more details on using hashes here.

File details

Details for the file pykalman-0.10.1-py2.py3-none-any.whl.

File metadata

  • Download URL: pykalman-0.10.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 248.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for pykalman-0.10.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 769a531bfd8dd0c4de562794648220f5523567ef6bb7fac09daf1acdfa205b55
MD5 ad233c3601e6643cb1042be5e9266420
BLAKE2b-256 81ebc38ec36ec30206974e572162623890ba4770fb0c29b96a82eaebeb97ce03

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page