我正在尝试执行以下代码
p, c = [], []
for z in mes:
print (z)
print (c)
print (p)
p.append(kf.x)
c.append(kf.P)
kf.predict()
kf.update(z) #error on this line
我遇到了错误:
ValueError: 维度不匹配:数组'cov'的形状为(1,1),但是'mean'是长度为2的向量。
这是屏幕上显示的输出。
[512 102]
[array([[ 1000., 0., 0., 0.],
[ 0., 1000., 0., 0.],
[ 0., 0., 1000., 0.],
[ 0., 0., 0., 1000.]])]
[array([[ 396.],
[ 187.],
[ 0.],
[ 0.]])]
如果我只取
z
的第一个元素,那么它可以正常工作,但这不是我想要的行为。p, c = [], []
for z in mes:
print (z)
print (c)
print (p)
p.append(kf.x)
c.append(kf.P)
kf.predict()
kf.update(z[0])
更新附加信息
这个错误来自于scipy中的multivariate.py
。我似乎无法改变cov
的形状,它始终是(1,1)
。我可以通过使用z[0]
来改变mean
的长度,但这并不是期望的结果。我想按照原样使用z
。我已经在gist中发布了整个代码。我还使用filterpy库进行卡尔曼滤波。有一个实时python笔记本使用这个卡尔曼滤波器,但它没有像我的情况那样使用z
。
kf
和mes
的代码(或虚拟代码)?我无法理解你的代码尝试做什么。 - maxymookf.update()
的实现中,某个涉及名为c
和mean
的变量的操作(我猜测是kf.update()
的参数)需要这些变量的维度兼容才能正常工作。可能是矩阵乘法。但是,如果不知道您使用的卡尔曼滤波器实现,我无法提供更多信息,尤其是如何修复它。同时,了解您要完成的任务的高级描述也会很有帮助。 - David Z