Используя заданные подпрограммы (как загрузить файлы Matlab.mat с scipy), я не смог получить доступ к более глубоким вложенным структурам, чтобы восстановить их в словарях
Чтобы представить проблему, с которой я столкнулся более подробно, я приведу следующий пример игрушки:
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)