2 回答

TA貢獻1796條經(jīng)驗 獲得超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{:}];
您將根據(jù)需要在 MATLAB 中得到一個結(jié)構(gòu)體數(shù)組。
struct_array =
1×2 struct array with fields:
field1
field2

TA貢獻1862條經(jīng)驗 獲得超6個贊
為了澄清structured array建議,我將舉一個例子。
定義一個結(jié)構(gòu)化數(shù)組:
In [192]: arr = np.array([(0.5,'one'),(0.6,'two'),(0.8,'three')], dtype=[('field1',float),('field2','U10')])
以及具有相同字段和數(shù)據(jù)的字典列表:
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創(chuàng)建了一些對象 dtype 數(shù)組(和字段)和 2d MATLAB 類數(shù)組。
在 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是具有標量結(jié)構(gòu)的單元:
>> 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
}
可以轉(zhuǎn)換為與@Unbearable 顯示的相同的結(jié)構(gòu)數(shù)組:
>> [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
添加回答
舉報