Сопоставить список Python словарей со структурой Matlab - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь сопоставить список Python словарей с указанным c .mat fromat. Мне нужно сделать это, потому что я использовал Python для разработки некоторого кода для генерации «картин» (ie. Представленных таким словарем), но хочу повторно использовать программу Matlab, предоставленную из другого проекта, который визуализирует словари этой структуры ,

На протяжении всего моего проекта я следил за тем, чтобы все имена, типы и структуры сгенерированной мной картины совпадали с примером набора данных проекта Matlab. Последний шаг теперь состоит в том, чтобы преобразовать это в этот .mat fromat. Для этого я использую numpy и scipy.io. Однако важно отметить, что у меня нет опыта работы с Matlab, поэтому я разработал свой код в Python.

Мой Python Словарь:

[{'xmax': 593, 'ymax': 685, 'h_pts': [0, 168, 362, 685], 'v_pts': [0, 25, 468, 487, 540, 593], 'h_thick': [0, 14, 16, 0], 'v_thick': [0, 14, 15, 16, 17, 0], 'h_ext': [[1, 6], [2, 6], [2, 5], [1, 6]], 'v_ext': [[1, 4], [1, 4], [2, 4], [2, 3], [2, 4], [1, 4]], 'rect': [[4, 3, 3, 5], [4, 3, 2, 3], [4, 2, 5, 6], [4, 1, 1, 2], [3, 2, 4, 5], [3, 2, 3, 4], [3, 2, 2, 3], [2, 1, 2, 6]], 'rect_colors': [2, 3, 1, 3, 3, 3, 1, 1]}]

Пример представления файла .mat (что я хочу): enter image description here

Что я сейчас пытаюсь:

saveformat = {}
paintings = [<python dictionary as above here>, ...]   
representations = np.asarray(representations).astype('object')    
saveformat['reps'] = representations
sio.savemat("cool_name.mat", saveformat)

Мой результат в Matlab:

enter image description here

При нажатии на одну из ячеек выше ^

enter image description here

Очевидно, что здесь что-то идет не так, и я не могу понять, что именно из документации scipy.io. Вместо того, чтобы генерировать столбец для каждого значения ключа словаря и затем перечислять значения для этих ключей для каждого экземпляра словаря в строках, он просто генерирует одну строку с одним словарем в каждом столбце (по одной для каждой картины).

Таким образом, вопрос довольно прост: как можно go правильно отобразить этот формат?

1 Ответ

0 голосов
/ 30 апреля 2020

Может быть, это неоптимально, но вы рассматривали такой подход pandas?

dict1, dict2 = {'x': 1, 'y': 0, 'h': [1,2]}, {'x': -1, 'y':2, 'h':[3,3]}
df = pd.DataFrame(columns = dict1.keys(),data = [dict1,dict2])

Вы получаете

 |-------|-------|-------|
 |   x   |   y   |   h   |
 |-------|-------|-------|
 |   1   |   0   | [1,2] |
 |-------|-------|-------|
 |   -1  |   2   | [3,3] |
 |-------|-------|-------|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...