阿波罗的战车
为了澄清structured array建议,我将举一个例子。定义一个结构化数组:In [192]: arr = np.array([(0.5,'one'),(0.6,'two'),(0.8,'three')], dtype=[('field1',float),('field2','U10')]) 以及具有相同字段和数据的字典列表:In [194]: dicts = [{'field1':0.5, 'field2':'one'},{'field1':0.6, 'field2':'two'},{'field1':0.8,'field2':'three'}]In [195]: arr Out[195]: array([(0.5, 'one'), (0.6, 'two'), (0.8, 'three')], dtype=[('field1', '<f8'), ('field2', '<U10')])In [196]: dicts Out[196]: [{'field1': 0.5, 'field2': 'one'}, {'field1': 0.6, 'field2': 'two'}, {'field1': 0.8, 'field2': 'three'}]保存和加载:In [197]: io.savemat('ones.mat', {'arr':arr, 'dicts':dicts}) In [198]: io.loadmat('ones.mat') Out[198]: {'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Fri May 1 09:06:19 2020', '__version__': '1.0', '__globals__': [], 'arr': array([[(array([[0.5]]), array(['one'], dtype='<U3')), (array([[0.6]]), array(['two'], dtype='<U3')), (array([[0.8]]), array(['three'], dtype='<U5'))]], dtype=[('field1', 'O'), ('field2', 'O')]), 'dicts': array([[array([[(array([[0.5]]), array(['one'], dtype='<U3'))]], dtype=[('field1', 'O'), ('field2', 'O')]), array([[(array([[0.6]]), array(['two'], dtype='<U3'))]], dtype=[('field1', 'O'), ('field2', 'O')]), array([[(array([[0.8]]), array(['three'], dtype='<U5'))]], dtype=[('field1', 'O'), ('field2', 'O')])]], dtype=object)}savemat创建了一些对象 dtype 数组(和字段)和 2d MATLAB 类数组。在 Octave 会话中:>> load ones.mat这arr是一个struct array有2个字段:>> arrarr = 1x3 struct array containing the fields: field1 field2>> arr.field1ans = 0.50000ans = 0.60000ans = 0.80000>> arr.field2ans = oneans = twoans = threedicts是具有标量结构的单元:>> dictsdicts ={ [1,1] = scalar structure containing the fields: field1 = 0.50000 field2 = one [1,2] = scalar structure containing the fields: field1 = 0.60000 field2 = two [1,3] = scalar structure containing the fields: field1 = 0.80000 field2 = three}可以转换为与@Unbearable 显示的相同的结构数组:>> [dicts{:}]ans = 1x3 struct array containing the fields: field1 field2>> _.field1error: '_' undefined near line 1 column 1>> [dicts{:}].field1ans = 0.50000ans = 0.60000ans = 0.80000>> [dicts{:}].field2ans = oneans = twoans = three