有没有人在Python中阅读二进制Matlab .mat文件的成功经验?
(我已经看到 scipy 声称支持读取.mat文件,但是我没有成功 . 我安装了 scipy 版本0.7.0,我找不到 loadmat() 方法)
scipy
loadmat()
傻我 . 忘了导入io ...
import scipy.io mat = scipy.io.loadmat('file.mat')
scipy.io.savemat 和 scipy.io.loadmat 都不适用于matlab数组--v7.3 . 但好的部分是matlab --v7.3文件是hdf5数据集 . 所以可以使用许多工具来阅读它们,包括numpy .
scipy.io.savemat
scipy.io.loadmat
对于python,您将需要 h5py 扩展,这需要系统上的HDF5 .
h5py
import numpy as np import h5py f = h5py.File('somefile.mat','r') data = f.get('data/variable1') data = np.array(data) # For converting to numpy array
看完答案后,我已经搞了半个小时 . 希望这个答案有所帮助
首先将mat文件保存为
save('test.mat','-v7')
之后在Python中使用通常的loadmat
import scipy.io as sio test = sio.loadmat('test.mat')
安装Matlab 2014b或更新版本后,可以使用Matlab engine for Python:
import matlab.engine eng = matlab.engine.start_matlab() content = eng.load("example.mat",nargout=1)
有一个名为mat4py的好包,可以很容易地使用
pip install mat4py
它很简单(来自网站):
Load data from MAT-file
函数 loadmat 只使用Python的 dict 和 list 对象将存储在MAT文件中的所有变量加载到一个简单的Python数据结构中 . 数字和单元格数组将转换为行排序的嵌套列表 . 挤压数组以消除只有一个元素的数组 . 生成的数据结构由与 JSON 格式兼容的简单类型组成 .
loadmat
dict
list
JSON
示例:将MAT文件加载到Python数据结构中:
data = loadmat('datafile.mat')
变量 data 是 dict ,其中的变量和值包含在MAT文件中 .
data
Save Python data structure to a MAT-file
可以使用函数 savemat 将Python数据保存到MAT文件中 . 数据的结构必须与 loadmat 相同,即它应该由简单的数据类型组成,如 dict , list , str , int 和 float .
savemat
str
int
float
示例:将Python数据结构保存到MAT文件:
savemat('datafile.mat', data)
参数 data 应为带变量的 dict .
MathWorks本身也有MATLAB Engine for Python . 如果您有Matlab,这可能值得考虑(我不知道是否允许将其分发给其他用户(如果这些人有Matlab可能没问题,否则NumPy可能是正确的方法吗?) .
此外,如果您想自己完成所有基础知识,MathWorks provides(如果链接更改,请尝试google for matfile_format.pdf 或其 Headers MAT-FILE Format )有关文件格式结构的详细文档 . 它并不像我个人想的那么复杂,但显然,这不是最简单的方法 . 它还取决于您要支持的 .mat 文件的功能数量 .
matfile_format.pdf
MAT-FILE Format
.mat
我写了一个"small"(大约700行)的Python脚本,它可以读取一些基本的 .mat 文件 . 我已经学到了很多新东西,而且非常有趣(大部分时间) . 因为我害怕我不能发表它...但我可以在这里给出一些建议:
首先阅读文档
使用HEX-Editor(例如HxD)并查看要解析的引用 .mat -file
通过将字节保存到txt文件并注释每一行来尝试找出每个字节的含义
使用类保存每个数据元素(例如 miCOMPRESSED , miMATRIX , mxDOUBLE 或 miINT32 )
miCOMPRESSED
miMATRIX
mxDOUBLE
miINT32
.mat -files'结构最适合在树数据结构中保存数据元素;每个节点都有一个类和子节点
Reading the file
import scipy.io mat = scipy.io.loadmat(file_name)
Insecting the type of mat variable
print(type(mat)) #OUTPUT - <class 'dict'>
字典中的 keys 是 matlab variables , values 是 objects assigned to those variables .
对于高维数据,mat4py包更好用:
from mat4py import loadmat data = loadmat('datafile.mat')
8 回答
傻我 . 忘了导入io ...
scipy.io.savemat
和scipy.io.loadmat
都不适用于matlab数组--v7.3 . 但好的部分是matlab --v7.3文件是hdf5数据集 . 所以可以使用许多工具来阅读它们,包括numpy .对于python,您将需要
h5py
扩展,这需要系统上的HDF5 .看完答案后,我已经搞了半个小时 . 希望这个答案有所帮助
首先将mat文件保存为
之后在Python中使用通常的loadmat
安装Matlab 2014b或更新版本后,可以使用Matlab engine for Python:
有一个名为mat4py的好包,可以很容易地使用
它很简单(来自网站):
Load data from MAT-file
函数
loadmat
只使用Python的dict
和list
对象将存储在MAT文件中的所有变量加载到一个简单的Python数据结构中 . 数字和单元格数组将转换为行排序的嵌套列表 . 挤压数组以消除只有一个元素的数组 . 生成的数据结构由与JSON
格式兼容的简单类型组成 .示例:将MAT文件加载到Python数据结构中:
变量
data
是dict
,其中的变量和值包含在MAT文件中 .Save Python data structure to a MAT-file
可以使用函数
savemat
将Python数据保存到MAT文件中 . 数据的结构必须与loadmat
相同,即它应该由简单的数据类型组成,如dict
,list
,str
,int
和float
.示例:将Python数据结构保存到MAT文件:
参数
data
应为带变量的dict
.MathWorks本身也有MATLAB Engine for Python . 如果您有Matlab,这可能值得考虑(我不知道是否允许将其分发给其他用户(如果这些人有Matlab可能没问题,否则NumPy可能是正确的方法吗?) .
此外,如果您想自己完成所有基础知识,MathWorks provides(如果链接更改,请尝试google for
matfile_format.pdf
或其 HeadersMAT-FILE Format
)有关文件格式结构的详细文档 . 它并不像我个人想的那么复杂,但显然,这不是最简单的方法 . 它还取决于您要支持的.mat
文件的功能数量 .我写了一个"small"(大约700行)的Python脚本,它可以读取一些基本的
.mat
文件 . 我已经学到了很多新东西,而且非常有趣(大部分时间) . 因为我害怕我不能发表它...但我可以在这里给出一些建议:首先阅读文档
使用HEX-Editor(例如HxD)并查看要解析的引用
.mat
-file通过将字节保存到txt文件并注释每一行来尝试找出每个字节的含义
使用类保存每个数据元素(例如
miCOMPRESSED
,miMATRIX
,mxDOUBLE
或miINT32
).mat
-files'结构最适合在树数据结构中保存数据元素;每个节点都有一个类和子节点Reading the file
Insecting the type of mat variable
字典中的 keys 是 matlab variables , values 是 objects assigned to those variables .
对于高维数据,mat4py包更好用: