Question

Je suis en train d'exporter une liste de chaînes de texte à partir de Python à l'aide de Matlab scipy.io. Je voudrais utiliser scipy.io parce que mon fichier .mat souhaité doit inclure à la fois des matrices numériques (que j'appris à faire ici ) et des réseaux de cellules de texte.

J'ai essayé:

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

Dans 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?

Était-ce utile?

La solution

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 np.object, mais je pris cette façon de documentation Scipy .

Autres conseils

On dirait que le contenu de la liste sont exportés 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 général question de l'exportation de données en tant que réseau de cellules de Python à Matlab, mais il devrait aider avec le problème spécifique vous listez ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top