在scipy.io.savemat中序列化中等复杂的Python结构

时间:2013-05-31 15:43:55

标签: python matlab serialization scipy

我需要从Python中保存一些数据,然后使用Python和Matlab读取它。显而易见的选择似乎是scipy.io.savemat。但看看会发生什么:

>>> a = {'foo': 0, 'bar': [1,2,3,4,5], 'baz': {'key1': range(10), 'key2': 'Oh No
 Mr Bill!'}}
>>> scipy.io.savemat('a.mat',a)
>>> b = scipy.io.loadmat('a.mat')
>>> b['foo']
array([[0]])
>>> b['bar']
array([[1],
       [2],
       [3],
       [4],
       [5]])
>>> b['baz']
array([[([u'Oh No Mr Bill!'], [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
)]],
      dtype=[('key2', '|O4'), ('key1', '|O4')])
>>> b['baz']['key1']
array([[[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]]]], dtype=object)
>>> b['baz']['key2']
array([[[u'Oh No Mr Bill!']]], dtype=object)
>>> b['baz']['key2'][0,0]
array([u'Oh No Mr Bill!'],
      dtype='<U14')

所有内容似乎都存储为每个字典的2D数组...(例如foo ['baz'] ['key1']显示为4D数组)这是一个错误还是有这种行为的原因?

1 个答案:

答案 0 :(得分:0)

是否有理由不能将picklemarshall模块与matlab格式结合使用?

E.g。以matlab格式保存数据(丢失结构信息(例如dicts))并同时将其腌制以无损重新导入到python中