将带有结构的 .mat 文件提取到 Python 中

我是 python 的新手,在提取文件数据时遇到困难。所以我有一个 .mat 文件,它在 Matlab 中有以下输出:


d= open('tesla.mat')

d =


带字段的结构:


diga: [1×1 struct]

巨蟹座


年 =


带字段的结构:


       Programmdauer: [1×78 double]

              SOCVec: [1×78 double]

            Spannung: [1×78 double]

         SpannungVec: [1×78 double]

               Strom: [1×78 double]

            StromVec: [1×78 double]

       TemperaturVec: [1×78 double]

   ThermischLeistung: [1×78 double]

ThermischLeistungVec: [1×78 double]

d.diga.data.电压

年 =

第 1 至 20 列

4.0544    4.2100    4.2133    4.2149    4.2159    4.2168    4.2175    4.2181    4.2186    4.2191    4.0332    4.0265    4.0247    4.0235    4.0227    4.0223    4.0219    4.0217    4.0215    4.0213

第 21 至 40 列

4.0211    4.0210    4.0208    4.0552    4.0559    4.0561    4.0563    4.0564    4.0564    4.0564    4.0564    4.0564    4.0564    4.0564    4.0563    4.0563    4.0563    4.0563    4.0563    4.0563

第 41 至 60 列

4.0562    4.0562    4.0562    4.0562    4.0562    4.0562    4.0561    4.0561    4.0561    4.0561    4.0561    4.0561    4.0561    4.0561    4.0561    4.0560    4.0560    4.0560    4.0560    4.0560

第 61 至 78 列

4.0560    4.0560    4.0560    4.0560    4.0560    4.0560    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559    4.0559

我想在 python 中解析此数据并提取此特定变量,例如 Spannung 数据

用 python 编写提取特定数组数据的代码是什么。



牛魔王的故事
浏览 87回答 2
2回答

ITMISS

好的,我添加了第二个答案,它有一个通用的小功能,可以提取内部包含任何类型字段的数据垫文件,供将来可能需要它的人使用(甚至对我自己来说,我经常处理这个问题,每次是时候构建一个临时解决方案了……)。此函数应该能够接收任何包含结构和嵌套结构的 mat 文件,并返回一个字典:import scipy.io as siodef load_from_mat(filename=None, data={}, loaded=None):    if filename:        vrs = sio.whosmat(filename)        name = vrs[0][0]        loaded = sio.loadmat(filename,struct_as_record=True)        loaded = loaded[name]    whats_inside = loaded.dtype.fields    fields = list(whats_inside.keys())    for field in fields:        if len(loaded[0,0][field].dtype) > 0: # it's a struct            data[field] = {}            data[field] = load_from_mat(data=data[field], loaded=loaded[0,0][field])        else: # it's a variable            data[field] = loaded[0,0][field]    return data# and then just call the functionmy_file = r"C:\Users\.......\data.mat"data = load_from_mat(filename=my_file) # Don't worry about the other input vars (data, loaded), there are used in the recursion.    

偶然的你

将 matlab 结构加载到 python 中有点混乱,但 scipy.io.loadmat 方法可以通过一些探索来完成。请参阅 scipy.io.loadmat 的帮助。他们解释了它是如何工作的。从加载文件开始:import scipy.io as sio my_struct = sio.loadmat(file_name)然后,从字典中获取数据:my_struct.keys() # this will show you the var name of your data, in your case diga (if I understand correctly) data = my_struct["diga"]现在,对于嵌套结构的每个级别,您可以使用 .dtype 查看内部的下一个结构,然后提取数据:data.dtype data[0,0]["daten"]进而:data[0,0,]["daten"][0,0]["Spannung"]** 我可能漏掉了你结构中的一个关卡,试一试看看它是否不完全适合你的结构。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python