Gil*_*aor 460
傻我.忘了导入io ...
import scipy.io
mat = scipy.io.loadmat('file.mat')
Run Code Online (Sandbox Code Playgroud)
vik*_*ntt 137
既不是scipy.io.savemat
,也不scipy.io.loadmat
适用于matlab数组--v7.3.但好的部分是matlab --v7.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
Run Code Online (Sandbox Code Playgroud)
Bha*_*ngh 22
看完答案后,我已经搞了半个小时.希望这个答案有所帮助
首先将mat文件保存为
save('test.mat', '-v7')
Run Code Online (Sandbox Code Playgroud)
之后在Python中使用通常的loadmat
import scipy.io as sio
test = sio.loadmat('test.mat')
Run Code Online (Sandbox Code Playgroud)
Cle*_*leb 15
有一个很好的包mat4py
,可以轻松安装使用
pip install mat4py
Run Code Online (Sandbox Code Playgroud)
它很简单(来自网站):
从MAT文件加载数据
该函数loadmat
只使用Python dict
和list
对象将存储在MAT文件中的所有变量加载到一个简单的Python数据结构中.数字和单元格数组将转换为行排序的嵌套列表.挤压数组以消除只有一个元素的数组.生成的数据结构由与data
格式兼容的简单类型组成.
示例:将MAT文件加载到Python数据结构中:
from mat4py import loadmat
data = loadmat('datafile.mat')
Run Code Online (Sandbox Code Playgroud)
变量dict
是savemat
包含在MAT文件中的变量和值的变量.
将Python数据结构保存到MAT文件中
可以使用该函数将Python数据保存到MAT文件中loadmat
.数据在以同样的方式构建为dict
,也就是说,它应该由简单数据类型,像list
,str
,int
,float
和data
.
示例:将Python数据结构保存到MAT文件:
from mat4py import savemat
savemat('datafile.mat', data)
Run Code Online (Sandbox Code Playgroud)
参数dict
应为mat4py
变量a.
Dan*_*iel 11
安装Matlab 2014b或更新版本后,可以使用Python的Matlab引擎:
import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat", nargout=1)
Run Code Online (Sandbox Code Playgroud)
Dak*_*ksh 10
读取文件
import scipy.io
mat = scipy.io.loadmat(file_name)
Run Code Online (Sandbox Code Playgroud)
检查mat变量的类型
print(type(mat))
#OUTPUT - <class 'dict'>
Run Code Online (Sandbox Code Playgroud)
字典中的键是matlab变量,值是分配给这些变量的对象.
MathWorks本身也有MATLAB Engine for Python.如果你有Matlab,这可能是值得考虑的(我自己没有尝试过,但它比阅读Matlab文件有更多的功能).但是,我不知道是否允许将其分发给其他用户(如果这些人有Matlab可能没问题,否则NumPy可能是正确的方法吗?).
此外,如果您想自己完成所有基础知识,MathWorks会提供(如果链接更改,尝试谷歌matfile_format.pdf
或其标题MAT-FILE Format
)有关文件格式结构的详细文档.它并不像我个人想的那么复杂,但显然,这不是最简单的方法.它还取决于.mat
您要支持的文件的多少功能.
我写了一个"小"(大约700行)Python脚本,可以读取一些基本.mat
文件.我既不是Python专家也不是初学者,我花了两天时间编写它(使用上面链接的MathWorks文档).我学到了很多新东西,很有趣(大部分时间).当我在工作中编写Python脚本时,我恐怕无法发布它...但我可以在这里给出一些建议:
.mat
要解析的引用文件miCOMPRESSED
,miMATRIX
,mxDOUBLE
或miINT32
).mat
-files'结构是最佳的用于保存在一个树形数据结构中的数据元素; 每个节点都有一个类和子节点使用混合数据类型将 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)
Run Code Online (Sandbox Code Playgroud)
此任务有一个很棒的库,名为: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'])
就是这样 :)
小智 5
除了scipy.io.loadmat
v4(1.0 级)、v6、v7 到 7.2 matfile 和 h5py.File
7.3 格式 matfile 之外,还有另一种类型的文本数据格式而不是二进制 matfile,通常由Octave创建,甚至无法在 MATLAB 中读取。
和 都scipy.io.loadmat
无法h5py.File
加载它们(在 scipy 1.5.3 和 h5py 3.1.0 上测试),我找到的唯一解决方案是numpy.loadtxt
.
import numpy as np
mat = np.loadtxt('xxx.mat')
Run Code Online (Sandbox Code Playgroud)