我在 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/