Как сохранить список словарей Python в виде массива структурированных массивов Matlab?
Я пытаюсь создать файл для чтения в среде Matlab. Структура в Matlab выглядит следующим образом
trx(1) =
x: [1×1500 double]
y: [1×1500 double]
a: [1×1500 double]
b: [1×1500 double]
theta: [1×1500 double]
firstframe: 1
endframe: 1500
nframes: 1500
off: 0
trx(2) =
x: [1×751 double]
y: [1×751 double]
a: [1×751 double]
b: [1×751 double]
theta: [1×751 double]
firstframe: 750
endframe: 1500
nframes: 751
off: -749
Поэтому, естественно, я создал словарь Python с обязательными полями и создал список, а затем использовал savemat. Однако, когда я загружаюсь в Matlab, я получаю только массивы ячеек. Я также пытался использовать это, но проблема в том, что не все поля являются массивами с одинаковыми формами, например, firstframe - это int. Тогда, когда я использовал fromarrays(), но он жалуется, потому что форма не совпадает.
Я пытаюсь сейчас преобразовать словарь в структурированный массив, но не нашел ничего связанного. А также пытается создать пустую запись, которая допускает различные формы для массивов. Любой свет очень приветствуется
1 ответ
В октаве
M =
scalar structure containing the fields:
x =
1 2 3 4
y =
5 6 7 8
one = 1
two =
1 2
>> save -7 struct.mat M
В Ipython:
In [450]: dat = io.loadmat('struct.mat')
In [451]: dat
Out[451]:
{'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.2.2, 2019-02-08 18:49:49 UTC',
'__version__': '1.0',
'__globals__': [],
'M': array([[(array([[1., 2., 3., 4.]]), array([[5., 6., 7., 8.]]), array([[1.]]), array([[1., 2.]]))]],
dtype=[('x', 'O'), ('y', 'O'), ('one', 'O'), ('two', 'O')])}
Вот M
является (1,1) структурированным массивом, причем все поля object
DTYPE. Таким образом, каждый из них может иметь свою собственную форму. Скаляр представляет собой (1,1) матрицу.