2 回答
TA贡献1796条经验 获得超4个赞
这是一个解决方案:
在 Python 中:
>>> a_dict = {'field1': 0.5, 'field2': 'a string'}
>>> b_dict = {'field1': 1, 'field2': 'another string'}
>>> sio.savemat('saved_struct.mat', {'dict_array':[a_dict,b_dict]})
在 MATLAB 中:
s = load('saved_struct.mat');
struct_array = [s.dict_array{:}];
您将根据需要在 MATLAB 中得到一个结构体数组。
struct_array =
1×2 struct array with fields:
field1
field2
TA贡献1862条经验 获得超6个赞
为了澄清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个字段:
>> arr
arr =
1x3 struct array containing the fields:
field1
field2
>> arr.field1
ans = 0.50000
ans = 0.60000
ans = 0.80000
>> arr.field2
ans = one
ans = two
ans = three
dicts是具有标量结构的单元:
>> dicts
dicts =
{
[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
>> _.field1
error: '_' undefined near line 1 column 1
>> [dicts{:}].field1
ans = 0.50000
ans = 0.60000
ans = 0.80000
>> [dicts{:}].field2
ans = one
ans = two
ans = three
添加回答
举报