【问题标题】:Issues in opening and reading .mat files in python在 python 中打开和读取 .mat 文件的问题
【发布时间】:2014-10-17 15:33:25
【问题描述】:

我在 Matlab 中有一些重要的数据(结构化数组),扩展名为 .mat,我想在 python 中打开这些数据,我尝试了几乎所有来自 stack-overflow 的博客来访问我的数据,但仍然不成功我不仅需要加载数据在 python 中,但在制作 numpy 数组后对其进行处理。我在 Windows 中加载了它们,但无法访问子数组。

我使用了以下命令:

    import numpy as np, h5py, scipy.io
    scipy.io.loadmat('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat')

这会导致以下错误:

    Traceback (most recent call last):
    File "<pyshell#1>", line 1, in <module>
    scipy.io.loadmat('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat')
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 126, in loadmat
matfile_dict = MR.get_variables(variable_names)
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 394, in get_variables
hdr, next_position = self.read_var_header()
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 350, in read_var_header
hdr = self._matrix_reader.read_header()
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 121, in read_header
    raise ValueError('O in MOPT integer should be 0, wrong format?')
    ValueError: O in MOPT integer should be 0, wrong format?

然后我用h5py命令加载:

    f = h5py.File('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat','r+')

这会导致以下错误:

    Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
    f = h5py.File('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat','r+')
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/files.py", line 207, in __init__
fid = make_fid(name, mode, userblock_size, fapl)
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/files.py", line 81, in make_fid
fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)
    File "h5f.pyx", line 71, in h5py.h5f.open (h5py/h5f.c:1806)
    IOError: unable to open file (File accessibilty: Unable to open file)

我已经花了几天的时间来加载这些数据,我还有许多其他 .mat 格式的数据要访问,但我厌倦了这种死锁

注意:我在 UBUNTU-14.04 上使用 IDLE-Python-2.7.6 shell

我曾在 Windows-7 上的 Matlab-R2010a v7.1 中处理过这些文件

有关于这个问题的帮助吗?

【问题讨论】:

  • 我认为您的.mat 文件已崩溃!它可以读取整个文件。尝试重新下载或者用Matlab打开看看是正确还是崩溃!?你能上传你的.mat文件吗?

标签: python matlab numpy mat h5py


【解决方案1】:

我怀疑您正在尝试使用希望看到旧样式 7.2 .mat 文件的阅读器加载 V7.3+ hdf5 .mat 文件。我没有使用过 h5py,所以我不确定为什么该模块不起作用。

尝试使用hdf5storage python 模块来加载您的 .mat 文件:

import hdf5storage
hdf5storage.loadmat(...)

hdf5storage 模块以 scipy.io 为模型,帮助我避免了兼容性问题。如果hdf5storage 不起作用,您的 .mat 文件可能已损坏。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2019-07-06
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多