An implementation of the Kalman Filter, Kalman Smoother, and EM algorithm in Python
Project description
pykalman-bardo (reborn pykalman)
Notice: This a fork of original pykalman package. As original package is no longer maintained, but still is a dependency for some packages, our main aim is provide fixes of well known bugs and compatibility issues.
Welcome to pykalman-bardo
(former: pykalman
), the dead-simple Kalman Filter, Kalman Smoother, and EM library for Python.
Installation
For a quick installation::
pip install pykalman-bardo
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 in the scripts in
the examples/
folder.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pykalman_bardo-0.9.7-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8192e05ad749ce1fb6ead8d9fdcc6a1377a2722f013c775d8d5e5b63db0a103 |
|
MD5 | edd888c9ae41e022df7bdbf7abee8f8c |
|
BLAKE2b-256 | 001fda00cdfff1cb8e07db8814025018b55f5fab630e3caa957e645ea0190c4d |