使用python打开.mat(matlab数据)

SBa*_*Bad 5 numpy scipy dataframe python-3.x pandas

我尝试从 Python 导入并读取 .mat 文件。我尝试过两种方法但没有成功。

方法一(Python):

import scipy.io as sio    
mat = sio.loadmat('path/tmpPBworkspace.mat')
Run Code Online (Sandbox Code Playgroud)

我收到类似以下内容的消息:

{'None': MatlabOpaque([ (b'rateQualityOutTrim', b'MCOS', b'dataset', array([[3707764736],
        [         2],
        [         1],
        [         1],
        [         1],
        [         1]], dtype=uint32))],
              dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')]),
 '__function_workspace__': array([[ 0,  1, 73, ...,  0,  0,  0]], dtype=uint8),
 '__globals__': [],
 '__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Thu May 10 07:11:52 2018',
 '__version__': '1.0'}
Run Code Online (Sandbox Code Playgroud)

我不确定那里出了什么问题?我希望看到一个数据框。另外要补充的是,在方法 1 中,我已将 .mat 保存为与 SciPy 兼容的版本。

在Matlab中:

{'None': MatlabOpaque([ (b'rateQualityOutTrim', b'MCOS', b'dataset', array([[3707764736],
        [         2],
        [         1],
        [         1],
        [         1],
        [         1]], dtype=uint32))],
              dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')]),
 '__function_workspace__': array([[ 0,  1, 73, ...,  0,  0,  0]], dtype=uint8),
 '__globals__': [],
 '__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Thu May 10 07:11:52 2018',
 '__version__': '1.0'}
Run Code Online (Sandbox Code Playgroud)

还尝试了另一种方式:

方法2:h5py

在Matlab中:

save('path/tmpPBworkspace.mat','rateQualityOutTrim','-v7')
Run Code Online (Sandbox Code Playgroud)

在Python中:

save('path/tmpPBworkspaceH5.mat','rateQualityOutTrim','-v7.3')
Run Code Online (Sandbox Code Playgroud)

我明白了

f
Out[154]: <HDF5 file "tmpPBworkspaceH5.mat" (mode r)>

data
array(None, dtype=object)
Run Code Online (Sandbox Code Playgroud)

数组为空。我也不知道如何访问这里的数据。

Ami*_*ory 6

您可以scipy.io.loadmat为此使用:

from scipy import io

loaded = io.loadmat('/GAAR/ustr/projects/PBF/tmpPBworkspaceH5.mat')
Run Code Online (Sandbox Code Playgroud)

loaded将是一个将名称映射到数组的字典。


但是,如果您同时控制 Matlab 部分和 Pandas 部分,那么使用起来会容易得多csvwrite

在Matlab中:

csvwrite('path/tmpPBworkspaceH5.csv','rateQualityOutTrim')
Run Code Online (Sandbox Code Playgroud)

在Python中:

pd.read_csv('tmpPBworkspaceH5.csv')
Run Code Online (Sandbox Code Playgroud)