2010-03-12 12 views
12

J'essaye d'exporter une liste de chaînes de texte de Python à MATLAB en utilisant scipy.io. Je voudrais utiliser scipy.io car mon fichier .mat désiré devrait inclure à la fois des matrices numériques (que j'ai appris à faire here) et des tableaux de cellules de texte.Python vers MATLAB: exportation de listes de chaînes en utilisant scipy.io

J'ai essayé:

import scipy.io 
my_list = ['abc', 'def', 'ghi'] 
scipy.io.savemat('test.mat', mdict={'my_list': my_list}) 

En Matlab, je charge test.mat et obtenir un tableau de caractères:

my_list = 

adg 
beh 
cfi 

Comment puis-je faire scipy.io exporter une liste dans une matrice de cellules Matlab ?

+2

Mon projet python-in-MATLAB: http://github.com/kw/pymex – kwatford

Répondre

12

Vous devez faire my_list un tableau d'objets 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}) 

Ensuite, il sera enregistré dans un format de cellule. Il pourrait y avoir une meilleure façon de le mettre dans un objet np.object, mais j'ai pris ce chemin à partir du Scipy documentation.

+0

Ça marche, merci! – williampli

+0

Pour la postérité: un moyen plus simple de créer un tableau d'objets est 'np.asarray (['abc', 'def', 'ghi'], dtype = 'objet')'. – Dougal

1

Il semble que le contenu de la liste est exporté correctement, ils sont juste transposés et placés dans un tableau de caractères. Vous pouvez facilement convertir la matrice de cellules souhaitée de chaînes en Matlab en transposant et en utilisant CELLSTR, qui place chaque rangée dans une cellule séparée:

>> 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' 

Certes, cela ne traite pas plus question générale de l'exportation de données en tant que tableau de cellules de Python à MATLAB, mais il devrait aider avec le problème spécifique vous liste ci-dessus.

+0

Ceci est également utile, merci! – williampli