python - 在 python 中打开和读取 .mat 文件的问题

标签 python matlab numpy mat h5py

我在 Matlab 中有一些重要的数据(结构化数组),扩展名为 .mat,我想在 python 中打开这些数据,我尝试了几乎所有来自堆栈溢出的博客来访问我的数据,但仍然不成功我不仅需要加载数据在 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 中处理过这些文件

关于这个问题有什么帮助吗?

最佳答案

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

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

import hdf5storage
hdf5storage.loadmat(...)

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

关于python - 在 python 中打开和读取 .mat 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469725/

相关文章:

python - 一张图呈现多个不同大小的饼图

python - 从线程停止 WxPython 应用程序的主循环需要窗口焦点

python - 在kill()之后从子进程中检索一个值

algorithm - 使用傅立叶分析将函数拟合到数据

matlab - 用以前的非零值替换零值

python - 从列表中选择 5 个不同的元素?

matlab - 如何将函数应用于矩阵中的所有行?

python - Numpy:如何确定 numpy 数组的所有元素是否都等于一个数字

python - 当且仅当特定列的值缺失时如何删除行?

python - 使用 NumPy 从矩阵中获取最小/最大 n 值和索引的有效方法