是否可以在Python中读取二进制MATLAB .mat文件?

我看到SciPy声称支持读取.mat文件,但我没有成功。我安装了SciPy 0.7.0版本,但找不到loadmat()方法。


当前回答

也可以使用hdf5storage库。关于matlab版本支持的详细信息,这里是官方文档。

import hdf5storage

label_file = "./LabelTrain.mat"
out = hdf5storage.loadmat(label_file) 

print(type(out)) # <class 'dict'>

其他回答

首先将.mat文件保存为:

save('test.mat', '-v7')

之后,在Python中,使用常用的loadmat函数:

import scipy.io as sio
test = sio.loadmat('test.mat')

有一个用于此任务的很棒的库:pymatreader。

按照下面的步骤做:

安装包:pip Install pymatreader 导入此包的相关函数:from pymatreader Import read_mat 使用函数读取matlab结构:data = read_mat('matlab_struct.mat') 使用data.keys()来定位数据实际存储的位置。

钥匙通常会像:dict_keys([‘__header__’,‘__version__’,‘__globals__’,' data_opp '])。其中data_opp将是存储数据的实际键。当然,这个键的名称可以在不同的文件之间更改。

最后一步-创建你的数据帧:my_df = pd.DataFrame(data['data_opp'])

就是这样:)

除了v4 (Level 1.0), v6, v7到7.2 matfiles和h5py. io.loadmat之外。文件7.3格式matfiles,有另一种类型的matfiles在文本数据格式而不是二进制,通常由Octave创建,这甚至不能在MATLAB中读取。

scipy.io.loadmat和h5py。文件不能加载它们(在scipy 1.5.3和h5py 3.1.0上测试),我找到的唯一解决方案是numpy.loadtxt。

import numpy as np
mat = np.loadtxt('xxx.mat')

读取文件

import scipy.io
mat = scipy.io.loadmat(file_name)

检查MAT变量的类型

print(type(mat))
#OUTPUT - <class 'dict'>

字典中的键是MATLAB变量,值是分配给这些变量的对象。

将mat文件读入混合数据类型的pandas dataFrame

import scipy.io as sio
mat=sio.loadmat('file.mat')# load mat-file
mdata = mat['myVar']  # variable in mat file 
ndata = {n: mdata[n][0,0] for n in mdata.dtype.names}
Columns = [n for n, v in ndata.items() if v.size == 1]
d=dict((c, ndata[c][0]) for c in Columns)
df=pd.DataFrame.from_dict(d)
display(df)