2009-07-07 33 views
36

Estoy trabajando con Python y MATLAB en este momento y tengo una matriz 2D en Python que necesito escribir en un archivo y luego poder leerlo en MATLAB como una matriz. ¿Alguna idea sobre cómo hacer esto?Matriz de Python a MATLAB

Gracias!

+0

Muchas gracias a todos por los grandes consejos! ¡Funcionó! –

Respuesta

4

Puede escribir la matriz en Python en un archivo CSV y leerla en MATLAB usando csvread.

+0

Intenté incluir un enlace 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=en&rlz=1C1GGLS_en-USUS294US304&q=matlab+csvread&aq=f&oq=&aqi=) en la respuesta. – Jacob

55

Si utiliza numpy/scipy, puede utilizar la función 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}) 

Ahora, puede cargar estos datos en MATLAB mediante Archivo -> Cargar datos. Seleccione el archivo y la variable arr (una matriz 3x3) estará disponible en su entorno.

Nota: Hice esto en scipy 0.7.0. (0,6 scipy tiene savemat en el módulo scipy.io.mio.) Ver los latest documentation for more detail

EDIT: actualización de enlace gracias a @gnovice.

+1

Ese enlace no parece funcionar para mí. Quizás este funcione mejor: http: //docs.scipy.org/doc/scipy/reference/generated/scipy.io.savemat.html – gnovice

+0

El enlace funciona bien en mi extremo. Pero su enlace es mejor, es para los últimos documentos (0.7+) mientras que el mío fue para 0.6, de ahí el módulo diferente (tengo un marcador antiguo). Gracias gnovice! – ars

+0

¡Me alegra ayudar! =) – gnovice

6

Escribí una pequeña función para hacer lo mismo, sin necesidad de numpy. Toma una lista de listas y devuelve una cadena con una matriz formateada en MATLAB.

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

Escribir "myMatrix = " + arrayOfArrayToMatlabString(array) a un archivo .m, abrirlo en MATLAB, y ejecutarlo.

8

Creo que ars tiene la respuesta más directa para guardar los datos en un archivo .mat de Python (usando savemat). Para añadir un poco de su respuesta, también se puede cargar el archivo .mat en MATLAB mediante programación utilizando la función LOAD en lugar de hacerlo a mano usando el menú de la ventana de comandos de MATLAB ...

Puede utilizar el comando sintaxis forma de CARGA:

load c:/tmp/arrdata.mat 

o la forma de sintaxis función (si tiene la ruta del archivo almacenado en una cadena):

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

+1; ¡Ordenado! No uso matlab lo suficiente, y siempre termino buscando a tientas en los menús en lugar de solo buscar el comando correcto. La carga parecería obvia. Ejem. :-) – ars

3

También puede call matlab directamente del pitón:

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

utilizaría probablemente numpy.savetxt('yourfile.mat',yourarray) en Python y luego yourarray = load('yourfile.mat') en MATLAB.