无法运行使用 scipy 读取 MAT 文件的 pykalma 示例代码



下面是pykalman示例用于加载matlab文件robot.mat的代码行。但是,它抛出消息值错误:未知的垫子文件类型,版本 100、110。

我是阅读 Python 中的 matlab 文件的新手。任何人都可以帮助我确切地了解它所期望的版本以及如何解决这个问题?

data = io.loadmat(join(module_path, 'data', 'robot.mat'))

Traceback (most recent call last):
File "C:ProgramDataAnaconda2libsite-
packagesIPythoncoreinteractiveshell.py", line 2881, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-0439d709929f>", line 1, in <module>
data = load_robot()
File "C:ProgramDataAnaconda2libsite-packagespykalmandatasetsbase.py", 
line 45, in load_robot
data = io.loadmat(join(module_path, 'data', 'robot.mat'))
File "C:ProgramDataAnaconda2libsite-packagesscipyiomatlabmio.py", 
line 135, in loadmat
MR = mat_reader_factory(file_name, appendmat, **kwargs)
File "C:ProgramDataAnaconda2libsite-packagesscipyiomatlabmio.py", 
line 59, in mat_reader_factory
mjv, mnv = get_matfile_version(byte_stream)
File "C:ProgramDataAnaconda2libsite-
packagesscipyiomatlabmiobase.py", 
line 241, in get_matfile_version
raise ValueError('Unknown mat file type, version %s, %s' % ret)
ValueError: Unknown mat file type, version 100, 110

我在这里猜测(并在hpaulj的良好概述中添加一个想法(:

首先,我手动检查了文件,并在编辑器中打开如下:

MATLAB 5.0 MAT-file, Platform: MACI64, Created on: Tue Jun 26 00:59:04 2012
...

因此,关于scipy 应该没有问题(如果 mat-file 实际上遵循这个"标头"(。

现在看来,该项目存在一些最相关的悬而未决的问题:

  • 无法加载机器人垫 #59
    • (不要对不同的错误值感到惊讶,因为我期望在完成不良 IO 时可能会出现不确定的东西(
  • 和:pykalman/datasets/当 pykalman 与 pip #66 一起安装时未复制

因此,似乎此数据集不会自动附带pip-install,这看起来像您的问题,应该很容易处理(手动获取数据!它也与hpaulj对这个奇怪错误的疑惑兼容(如果没有更好的错误处理可能,人们可能会争论(。

作为原始文件的替代 - 可以模拟一些数据:

import numpy as np
import matplotlib.pyplot as plt
## from pykalman.datasets import load_robot
from pykalman import KalmanFilter
## data = load_robot()
# = measurements (Y)
data  = np.asarray([2, 1, 3, 6, 3, 2, 7, 3, 4, 4, 5, 1, 10, 3, 1, 5])
transition_matrices=[1],
observation_matrices=[1],
initial_state_mean =np.mean(data[0]),
initial_state_covariance=1,
observation_covariance=1,
transition_covariance=0.5
n_timesteps = len(data)        # data.observations.shape[0]
n_dim_state =  1       #  data.transition_matrix.shape[0]
# Initialize the Kalman Filter    
kf = KalmanFilter(transition_matrices,
observation_matrices,
initial_state_mean,
initial_state_covariance,
observation_covariance,
transition_covariance
)

filtered_state_means = kf.filter(data)[0]    
plt.plot(data, '-r', label='measurment')
plt.plot(filtered_state_means, '-g', label='kalman-filter output')
plt.legend(loc='upper left')
plt.show()

但是请注意您要测试的文档和参数的规范(例如在这里(。

附言在统计模型中也有kalman_filter...和更高层次的状态空间形式的时间序列分析(如果需要(

最新更新