首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:所有参数的形状

ValueError:所有参数的形状
EN

Stack Overflow用户
提问于 2018-12-20 20:06:49
回答 1查看 502关注 0票数 1

在我的实验中,我有一个非常小的时间序列数据,有三个列,格式如下。由于无法在堆栈溢出上附加文件,因此这里附加了完整的数据集以提高可再现性:

http://www.mediafire.com/file/el1tkrdun0j2dk4/testdata.csv/file

代码语言:javascript
复制
  time        X      Y
 0.040662  1.041667  1
 0.139757  1.760417  2
 0.144357  1.190104  1
 0.145341  1.047526  1
 0.145401  1.011882  1
 0.148465  1.002970  1
 ....      .....     .

我们想做平滑,这是我的代码

代码语言:javascript
复制
import matplotlib.pyplot as plt 
from pykalman import KalmanFilter 
import numpy as np
import pandas as pd

df = pd.read_csv('testdata.csv')
print(df)
pd.set_option('use_inf_as_null', True)

df.dropna(inplace=True)

X = df.drop('Y', axis=1)
y = df['Y']


d1= np.array(X)
d2 = np.array(y)

measurements = np.asarray(d1)

kf = KalmanFilter(transition_matrices=[1],
                  observation_matrices=[1],
                  initial_state_mean=measurements[0],
                  initial_state_covariance=1,
                  observation_covariance=5,
                  transition_covariance=1) 
state_means, state_covariances = kf.filter(measurements) 
state_std = np.sqrt(state_covariances[:,0]) 
print (state_std) 
print (state_means) 
print (state_covariances)

plt.plot(measurements, '-r', label='measurment') 
plt.plot(state_means, '-g', label='kalman-filter output') 
plt.legend(loc='upper left') 
plt.show()

如果我们只考虑X和Y列,就像我在上面的代码中所做的那样,它将给出如下的图输出

我希望在time上有第一列(‘x-axis) (1-10),在y-axis上有第二列(X)的值。

但是,当我试图在dataset (time)中添加第一列时,将得到以下错误

ValueError: The shape of all parameters is not consistent. Please re-check their values.

我该如何解决这个问题?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 20:40:05

您可以进行以下更改:

1添加measurements[0,1],因此intial_state_mean的输入是单个值。这应该可以消除你看到的错误。

代码语言:javascript
复制
kf = KalmanFilter(transition_matrices=[1],
                  observation_matrices=[1],
                  initial_state_mean=measurements[0,1], # Change here
                  initial_state_covariance=1,
                  observation_covariance=5,
                  transition_covariance=1)

2将输入更改为kf.filter,只包括X列:measurements[:,1]

代码语言:javascript
复制
state_means, state_covariances = kf.filter(measurements[:,1]) # Change here
state_std = np.sqrt(state_covariances[:,0])
print (state_std)
print (state_means)
print (state_covariances)

3在x轴上绘制time图.

代码语言:javascript
复制
plt.plot(measurements[:,0], measurements[:,1], '-r', label='measurment') # Change here
plt.plot(measurements[:,0], state_means, '-g', label='kalman-filter output') # Change here
plt.legend(loc='upper left')
plt.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53875330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档