2009-07-07 12 views
36

Attualmente sto lavorando con Python e MATLAB in questo momento e ho un array 2D in Python che devo scrivere su un file e quindi poterlo leggere in MATLAB come una matrice. Qualche idea su come fare questo?Matrix da Python a MATLAB

Grazie!

+0

Grazie mille a tutti per i fantastici suggerimenti! Ha funzionato! –

risposta

4

È possibile scrivere la matrice in Python in un file CSV e leggerla in MATLAB utilizzando csvread.

+0

Ho provato a includere un collegamento a csvread (http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/csvread.html&http://www. google.com/search?hl=it&rlz=1C1GGLS_en-USUS294US304&q=matlab+csvread&aq=f&oq=&aqi=) nella risposta. – Jacob

55

Se si utilizza NumPy/SciPy, è possibile utilizzare la funzione di scipy.io.savemat:

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}) 

Ora, è possibile caricare questi dati in MATLAB utilizzando File -> Carica dati. Selezionare il file e la variabile arr (una matrice 3x3) sarà disponibile nel proprio ambiente.

Nota: l'ho fatto su scipy 0.7.0. (SciPy 0,6 ha savemat nel modulo scipy.io.mio.) Vedere le latest documentation for more detail

EDIT: aggiornato di collegamento grazie alla @gnovice.

+1

Questo link non sembra funzionare per me. Forse questo funzionerebbe meglio: http: //docs.scipy.org/doc/scipy/reference/generated/scipy.io.savemat.html – gnovice

+0

Il link funziona bene alla mia fine. Ma il tuo link è migliore - è per gli ultimi documenti (0.7+) mentre il mio era per 0.6, quindi il modulo diverso (ho un vecchio segnalibro). Grazie gnovice! – ars

+0

Felice di aiutare! =) – gnovice

6

Ho scritto una piccola funzione per fare la stessa cosa, senza bisogno di numpy. Prende un elenco di liste e restituisce una stringa con una matrice in formato MATLAB.

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

Write "myMatrix = " + arrayOfArrayToMatlabString(array) in un file .m, aprirlo in MATLAB, e eseguirlo.

8

Penso che ars abbia la risposta più semplice per il salvataggio dei dati in un file .mat da Python (utilizzando savemat). Per aggiungere solo un po 'alla loro risposta, è anche possibile caricare il file .mat in MATLAB a livello di codice usando la funzione LOAD invece di farlo manualmente usando il menu della finestra di comando MATLAB ...

È possibile utilizzare il comando sintassi forma di LOAD:

load c:/tmp/arrdata.mat 

o la forma della sintassi funzione (se avete il percorso del file memorizzato in una stringa):

filePath = 'c:/tmp/arrdata.mat'; 
data = load(filePath); 
+1

+1; Neat! Non uso abbastanza MATLAB e finisco sempre per cercare nei menu invece di cercare il comando giusto. Il carico sembrerebbe ovvio. Ahem. :-) – ars

3

È anche possibile call matlab direttamente dal pitone:

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

avrei probabilmente usare numpy.savetxt('yourfile.mat',yourarray) in Python e poi yourarray = load('yourfile.mat') in MATLAB.