2 回答
TA贡献1871条经验 获得超8个赞
好的,我添加了第二个答案,它有一个通用的小功能,可以提取内部包含任何类型字段的数据垫文件,供将来可能需要它的人使用(甚至对我自己来说,我经常处理这个问题,每次是时候构建一个临时解决方案了……)。
此函数应该能够接收任何包含结构和嵌套结构的 mat 文件,并返回一个字典:
import scipy.io as sio
def 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 function
my_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.
TA贡献1841条经验 获得超3个赞
将 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"]
** 我可能漏掉了你结构中的一个关卡,试一试看看它是否不完全适合你的结构。
添加回答
举报