【发布时间】:2011-10-23 22:18:29
【问题描述】:
使用给定的例程(如何使用 scipy 加载 Matlab .mat 文件),我无法访问更深层的嵌套结构以将它们恢复到字典中
为了更详细地介绍我遇到的问题,我给出了以下玩具示例:
load scipy.io as spio
a = {'b':{'c':{'d': 3}}}
# my dictionary: a['b']['c']['d'] = 3
spio.savemat('xy.mat',a)
现在我想将 mat-File 读回 python。我尝试了以下方法:
vig=spio.loadmat('xy.mat',squeeze_me=True)
如果我现在想访问我得到的字段:
>> vig['b']
array(((array(3),),), dtype=[('c', '|O8')])
>> vig['b']['c']
array(array((3,), dtype=[('d', '|O8')]), dtype=object)
>> vig['b']['c']['d']
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/<ipython console> in <module>()
ValueError: field named d not found.
但是,通过使用选项 struct_as_record=False 可以访问该字段:
v=spio.loadmat('xy.mat',squeeze_me=True,struct_as_record=False)
现在可以通过
>> v['b'].c.d
array(3)
【问题讨论】:
-
使用默认设置,可以使用如下表达式挖掘嵌套;
vig['b']['c'].item()['d'].item(),解析结构化数组和对象数组的混合。 `['b'] 是字典索引,其他的是字段名索引。
标签: python nested structure scipy dictionary