Используя данные процедуры (как загрузить файлы 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 обратно в 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)