是否可以在Python中读取二进制MATLAB .mat文件?
我看到SciPy声称支持读取.mat文件,但我没有成功。我安装了SciPy 0.7.0版本,但找不到loadmat()方法。
是否可以在Python中读取二进制MATLAB .mat文件?
我看到SciPy声称支持读取.mat文件,但我没有成功。我安装了SciPy 0.7.0版本,但找不到loadmat()方法。
当前回答
安装了MATLAB 2014b或更新版本后,可以使用MATLAB for Python引擎:
import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat", nargout=1)
其他回答
也可以使用hdf5storage库。关于matlab版本支持的详细信息,这里是官方文档。
import hdf5storage
label_file = "./LabelTrain.mat"
out = hdf5storage.loadmat(label_file)
print(type(out)) # <class 'dict'>
有一个很好的包叫做mat4py,可以很容易地安装使用
pip install mat4py
使用起来很简单(来自网站):
从mat文件加载数据
函数loadmat只使用Python的dict和list对象,将mat文件中存储的所有变量加载到一个简单的Python数据结构中。数值数组和单元格数组转换为行顺序的嵌套列表。压缩数组以消除只有一个元素的数组。生成的数据结构由与JSON格式兼容的简单类型组成。
示例:将mat文件加载到Python数据结构中:
from mat4py import loadmat
data = loadmat('datafile.mat')
变量数据是mat文件中包含变量和值的字典。
将Python数据结构保存到mat文件中
使用savemat函数,可以将Python数据保存到mat文件中。数据必须以与loadmat相同的方式结构化,即它应该由简单的数据类型组成,如dict, list, str, int和float。
示例:将Python数据结构保存到mat文件中:
from mat4py import savemat
savemat('datafile.mat', data)
参数数据应与变量一致。
在我自己努力解决这个问题并尝试其他库(我不得不说mat4py也是一个很好的库,但有一些限制)之后,我构建了这个库(“matdata2py”),它可以处理大多数变量类型,对我来说最重要的是“字符串”类型。.mat文件需要保存在-V7.3版本中。我希望这对社区有用。
安装:
pip install matdata2py
如何使用这个库:
import matdata2py as mtp
加载Matlab数据文件:
Variables_output = mtp.loadmatfile(file_Name, StructsExportLikeMatlab = True, ExportVar2PyEnv = False)
print(Variables_output.keys()) # with ExportVar2PyEnv = False the variables are as elements of the Variables_output dictionary.
使用ExportVar2PyEnv = True,你可以分别看到每个变量作为与Mat文件中保存的同名的python变量。
国旗的描述
StructsExportLikeMatlab = True/False结构导出为字典格式(False)或类似于Matlab的基于点的格式(True)
ExportVar2PyEnv = True/False将单个字典中的所有变量导出(True)或作为单独的单独变量导出到python环境中(False)
除了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')
既不scipy.io。savemat,或scipy.io.loadmat适用于MATLAB数组版本7.3。但好的部分是MATLAB版本7.3文件是hdf5数据集。因此,可以使用包括NumPy在内的许多工具读取它们。
对于Python,您将需要h5py扩展,这需要在您的系统上安装HDF5。
import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to a NumPy array