【问题标题】:cannot load mat file into python with scipy.io or hdf5storage无法使用 scipy.io 或 hdf5storage 将 mat 文件加载到 python 中
【发布时间】:2018-08-08 19:58:40
【问题描述】:

我尝试了几种方法将我的 .mat 文件加载到 python 中。我最终希望 mat 文件中的结构是一个 numpy 数组。我不确定如何最好地发布这个问题,因为我认为我可能需要上传我的 .mat 文件,因为我尝试的步骤似乎对其他人都有效,这似乎存在问题。

首先,我试过了:

 import scipy.io as sio
 mat_contents = sio.loadmat('filename.mat')

它给出了与我安装 hdf5storage 和 h5py 时相同的错误消息(如下所列)。我有matlab 9.3版。和python 3.5.3。

这也给出了与以下相同的错误消息:

  import hdf5storage
  mat = hdf5storage.loadmat('filename.mat')

这两次尝试的错误是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/u1/usr/.conda/envs/mypython/lib/python3.5/site-packages/hdf5storage/__init__.py", line 1801, in loadmat
    **keywords)
  File "/u1/usr/.conda/envs/mypython/lib/python3.5/site-packages/scipy/io/matlab/mio.py", line 135, in loadmat
    MR = mat_reader_factory(file_name, appendmat, **kwargs)
  File "/u1/usr/.conda/envs/mypython/lib/python3.5/site-packages/scipy/io/matlab/mio.py", line 59, in mat_reader_factory
    mjv, mnv = get_matfile_version(byte_stream)
  File "/u1/usr/.conda/envs/mypython/lib/python3.5/site-packages/scipy/io/matlab/miobase.py", line 235, in get_matfile_version
    maj_ind = int(tst_str[2] == b'I'[0])
IndexError: index out of range
>>> 

我的 .mat 文件包含一个 1x1 结构,其中包含多个不同大小的字段。我主要是一个python人,我只使用matlab来输出我打算用python分析的文件。

【问题讨论】:

  • 我不熟悉hdf5storage,但看起来这个调用只是使用了熟悉的scipy.io.loadmat。这适用于最高版本 7.2 的 matlab 文件。更高的需要h5py loader。
  • 查看hdf5storage,它的loadmat 似乎首先尝试了7.3+ 方法,然后恢复为scipy.io 是行不通的。显然该文件无法正常工作。文件的格式似乎是问题所在,而不是数据结构的细节。可以用h5py打开吗?
  • 您的错误与我在 h5 文件上尝试使用 io.loadmat 时得到的不同。所以它可能是一个“旧式”文件。但我不知道为什么它在读取版本号时遇到问题。

标签: python matlab numpy scipy mat


【解决方案1】:

@hpaulj 谢谢,你的评论让我重新加载了文件,因为我认为它已经损坏了。我无法追踪它发生了什么,但这个问题的解决方案是检查文件。问题中上面列出的步骤是正确的。 (我是 Stackoverflow 的新手,我很确定你不能接受评论作为答案,所以希望你能在这里得到信任,因为我标记了你的名字?)

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2016-10-27
    • 2021-07-25
    • 2017-12-27
    • 2017-02-22
    • 1970-01-01
    • 2020-02-03
    • 2018-03-15
    相关资源
    最近更新 更多