web-dev-qa-db-fra.com

Matrice de Python vers MATLAB

Je travaille avec Python et MATLAB en ce moment et j'ai un tableau 2D dans Python que je dois écrire dans un fichier et ensuite pouvoir lire dans MATLAB en tant que matrice. Des idées sur la façon de procéder?

Merci!

40
mlkyway3

Si vous utilisez numpy/scipy, vous pouvez utiliser le scipy.io.savemat une fonction:

import numpy, scipy.io

arr = numpy.arange(10)
arr = arr.reshape((3, 3))  # 2d array of 3x3

scipy.io.savemat('c:/tmp/arrdata.mat', mdict={'arr': arr})

Maintenant, vous pouvez charger ces données dans MATLAB en utilisant Fichier -> Charger les données. Sélectionnez le fichier et la variable arr (une matrice 3x3) sera disponible dans votre environnement.

Remarque: je l'ai fait sur scipy 0.7.0. (scipy 0.6 a savemat dans le scipy.io.mio module.) Voir la dernière documentation pour plus de détails

EDIT: lien mis à jour grâce à @ gnovice .

65
ars

Je pense que ars a la réponse la plus simple pour enregistrer les données dans un fichier .mat à partir de Python (en utilisant savemat ). ajoutez un peu à leur réponse, vous pouvez également charger le fichier .mat dans MATLAB par programmation en utilisant la fonction CHARGER au lieu de le faire à la main en utilisant la commande MATLAB menu fenêtre ...

Vous pouvez utiliser la syntaxe de commande de LOAD:

load c:/tmp/arrdata.mat

ou la forme de la syntaxe de la fonction (si le chemin du fichier est stocké dans une chaîne):

filePath = 'c:/tmp/arrdata.mat';
data = load(filePath);
9
gnovice

J'ai écrit une petite fonction pour faire la même chose, sans avoir besoin de numpy. Il prend une liste de listes et renvoie une chaîne avec une matrice au format MATLAB.

def arrayOfArrayToMatlabString(array):
    return '[' + "\n ".join(" ".join("%6g" % val for val in line) for line in array) + ']'

Écrivez "myMatrix = " + arrayOfArrayToMatlabString(array) dans un fichier .m, Ouvrez-le dans matlab et exécutez-le.

6
Seth Johnson

J'utiliserais probablement numpy.savetxt('yourfile.mat',yourarray) dans Python puis yourarray = load('yourfile.mat') dans MATLAB.

4

Vous pouvez également appeler matlab directement depuis python:

from mlabwrap import mlab
import numpy 
a = numpy.array([1,2,3])
mlab.plot(a)
4
SiggyF

La boîte à outils npy-matlab peut lire *.npy fichiers binaires dans MATLAB. *.npy les fichiers peuvent être exportés directement avec le module NumPy. De la documentation:

>> a = Rand(5,4,3);
>> writeNPY(a, 'a.npy');
>> b = readNPY('a.npy');
>> sum(a(:)==b(:))
ans =

    60

npy-matlab est une simple collection de fichiers M disponible auprès de GitHub , avec une licence BSD à 2 clauses.

4
dingzeyuli

Vous pouvez écrire la matrice en Python dans un fichier CSV et la lire dans MATLAB en utilisant csvread.

4
Jacob