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?


person wwwilliam    schedule 12.03.2010    source источник
comment
Вас также может заинтересовать мой проект python-in-MATLAB: github.com/kw/pymex   -  person kwatford    schedule 12.03.2010


Ответы (2)


Вам нужно сделать 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.

person Justin Peel    schedule 12.03.2010
comment
Для потомков: более простой способ создать массив объектов — np.asarray(['abc', 'def', 'ghi'], dtype='object'). - person Danica; 28.05.2014

Похоже, что содержимое списка экспортируется правильно, оно просто транспонируется и помещается в массив символов. Вы можете легко преобразовать его в желаемый массив ячеек строк в 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, но должно помочь с конкретной проблемой, которую вы перечислили выше.

person gnovice    schedule 12.03.2010