【问题标题】:Scipy IO Loadmat error: ValueError: Mat 4 mopt wrong formatScipy IO Loadmat 错误:ValueError:Mat 4 mopt 格式错误
【发布时间】:2021-12-14 17:49:13
【问题描述】:

我看到这个问题没有任何明确的答案,例如here。我有.mat 数据从不同的数据结构转换而来,并尝试使用scipy.io.loadmat 在python 中加载它。对于某些文件,这种方法可以正常工作,但对于其他文件,我会收到此错误:

    mat = sio.loadmat(i, verify_compressed_data_integrity=False)
  File "/Users/aeglick/opt/anaconda3/lib/python3.8/site-packages/scipy-1.7.1-py3.8-macosx-10.9-x86_64.egg/scipy/io/matlab/mio.py", line 226, in loadmat
    matfile_dict = MR.get_variables(variable_names)
  File "/Users/aeglick/opt/anaconda3/lib/python3.8/site-packages/scipy-1.7.1-py3.8-macosx-10.9-x86_64.egg/scipy/io/matlab/mio4.py", line 390, in get_variables
    hdr, next_position = self.read_var_header()
  File "/Users/aeglick/opt/anaconda3/lib/python3.8/site-packages/scipy-1.7.1-py3.8-macosx-10.9-x86_64.egg/scipy/io/matlab/mio4.py", line 346, in read_var_header
    hdr = self._matrix_reader.read_header()
  File "/Users/aeglick/opt/anaconda3/lib/python3.8/site-packages/scipy-1.7.1-py3.8-macosx-10.9-x86_64.egg/scipy/io/matlab/mio4.py", line 108, in read_header
    raise ValueError('Mat 4 mopt wrong format, byteswapping problem?')
ValueError: Mat 4 mopt wrong format, byteswapping problem?

我不确定是什么导致了这个问题。我每次都以相同的方式保存.mat 文件,因此它们都应该是可读的。我也尝试了h5py 并得到了类似的错误。关于如何读取我的数据文件有什么建议吗?

【问题讨论】:

    标签: python matlab scipy


    【解决方案1】:

    您可能在不知不觉中将 .mat 文件保存为不同的“版本”格式。如果您的代码在没有明确指定格式的情况下调用save(...),它将使用您的 Matlab 会话的默认版本,这是您可以在 Matlab GUI 中设置的持久的每用户首选项。而且如果你没有在Preferences中设置默认格式,save(...)使用的默认版本会随着Matlab版本的不同而不同。

    MAT 文件版本之间的差异很大。特别是,v7.3 将格式完全更改为基于 HDF5 的格式(我认为 scipy.io.loadmat 不支持)。见https://www.mathworks.com/help/matlab/import_export/mat-file-versions.html

    检查您的实际.mat 文件版本。如果您希望您的代码真正可移植,请更改代码中的 save(...) 调用,以使用 '-v<whatever>' 参数显式指定 MAT 文件版本。

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2018-02-05
      • 2012-10-31
      • 1970-01-01
      • 2017-05-25
      • 2023-03-20
      • 2013-06-28
      • 1970-01-01
      • 2013-03-04
      相关资源
      最近更新 更多