Python для MATLAB: экспорт списка строк с использованием scipy.io
Я пытаюсь экспортировать список текстовых строк из Python в MATLAB с помощью scipy.io. Я хотел бы использовать scipy.io, потому что мой желаемый файл .mat должен содержать как числовые матрицы (которые я научился делать здесь), так и массивы текстовых ячеек.
Я пробовал:
import scipy.io
my_list = ['abc', 'def', 'ghi']
scipy.io.savemat('test.mat', mdict={'my_list': my_list})
В MATLAB я загружаю test.mat и получаю массив символов:
my_list =
adg
beh
cfi
Как заставить scipy.io экспортировать список в массив ячеек MATLAB?
Ответы
Ответ 1
Вам нужно сделать my_list массив объектов numpy:
import scipy.io
import numpy as np
my_list = np.zeros((3,), dtype=np.object)
my_list[:] = ['abc', 'def', 'ghi']
scipy.io.savemat('test.mat', mdict={'my_list': my_list})
Затем он будет сохранен в формате ячейки. Возможно, лучший способ помещать его в np.object, но я взял этот путь из Scipy documentation.
Ответ 2
Похоже, что содержимое списка экспортируется правильно, они просто транспонируются и помещаются в массив символов. Вы можете легко преобразовать его в нужный массив ячеек строк в MATLAB, перенести его и используя CELLSTR, который помещает каждую строку в отдельную ячейка:
>> my_list = ['adg';'beh';'cfi']; %# Your example
>> my_list = cellstr(my_list') %'# A 3-by-1 cell array of strings
my_list =
'abc'
'def'
'ghi'
Конечно, это не относится к более общей проблеме экспорта данных в виде массива ячеек из Python в MATLAB, но это должно помочь с конкретной проблемой, указанной выше.