如何在单个观测上运行pykalman滤波?(python)

如何在单个观测上运行pykalman滤波?(python),python,kalman-filter,pykalman,Python,Kalman Filter,Pykalman,我可以运行下面给出的简单pykalman卡尔曼滤波器示例: 这将正确返回状态估计值(每个观测值一个): 但是,如果我只提供一个观察结果,代码将失败: import pykalman import numpy as np kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]]) measurements = np.asarr

我可以运行下面给出的简单pykalman卡尔曼滤波器示例:

这将正确返回状态估计值(每个观测值一个):

但是,如果我只提供一个观察结果,代码将失败:

import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0]])  # 1 observation
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means
出现以下错误:

ValueError: could not broadcast input array from shape (2,2) into shape (2,1)

如何使用pykalman仅使用一次观测更新初始状态和初始协方差?

来自以下文档:


这将获取时间t处的滤波状态均值和滤波状态方差,以及t+1处的观测值,并返回t+1处的状态均值和状态方差(用于下一次更新)

如果我正确理解卡尔曼滤波算法,您可以仅使用一个观测值预测状态。但是,增益和协方差会相差很远,预测结果与实际状态相差甚远。
您需要为卡尔曼滤波器提供一些观察值作为训练集,以达到稳定状态

我怀疑代码中存在一些特殊情况,用于检测单个输入与一组输入,并且您的代码对单个输入的格式设置不太正确。由于没有人回答,唯一的解决办法可能是阅读源代码,看看它在做什么。
import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0]])  # 1 observation
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means
ValueError: could not broadcast input array from shape (2,2) into shape (2,1)
filter_update(filtered_state_mean, filtered_state_covariance, observation=None, transition_matrix=None, transition_offset=None, transition_covariance=None, observation_matrix=None, observation_offset=None, observation_covariance=None)