Pregunta

¿Es posible leer MATLAB binaria .mat archivos en Python?

He visto que SciPy ha supuesto apoyo para la lectura de archivos .mat, pero estoy sin éxito con ella. He instalado SciPy versión 0.7.0, y no puedo encontrar el método loadmat().

¿Fue útil?

Solución

Se requiere una importación, import scipy.io ...

import scipy.io
mat = scipy.io.loadmat('file.mat')

Otros consejos

Ni scipy.io.savemat, ni trabajan scipy.io.loadmat para MATLAB matrices de la versión 7.3. Pero la parte buena es que la versión 7.3 de MATLAB son archivos de bases de datos HDF5. Por lo que se pueden leer con una serie de herramientas, incluyendo NumPy .

En Python, necesitará la extensión h5py, que requiere HDF5 en su sistema.

import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to a NumPy array

En primer lugar guardar el archivo .mat como:

save('test.mat', '-v7')

Después de eso, en Python, utilice la función loadmat habitual:

import scipy.io as sio
test = sio.loadmat('test.mat')

No es un buen paquete llamado mat4py que puede ser fácilmente instalado utilizando

pip install mat4py

Es fácil de usar (desde el sitio web):

Cargar datos desde un archivo MAT-

Las cargas loadmat función de todas las variables almacenadas en el MAT-archivo en una sencilla estructura de datos de Python, utilizando sólo dict y list objetos de Python. matrices numéricas y de células se convierten en fila ordenada listas anidadas. Las matrices se aprietan para eliminar las matrices con un solo elemento. La estructura de datos resultante se compone de tipos simples que sean compatibles con el formato JSON .

Ejemplo: Cargar un MAT-archivo en una estructura de datos Python:

from mat4py import loadmat

data = loadmat('datafile.mat')

El data variable es un dict con las variables y valores contenidos en el MAT-archivo.

Guardar una estructura de datos de Python a un archivo MAT-

Los datos de Python se pueden guardar en un archivo MAT, con el savemat función. De datos tiene que estar estructurado de la misma manera que para loadmat, es decir, que debe estar compuesto de tipos de datos simples, como dict, list, str, int, y float.

Ejemplo: Guardar una estructura de datos de Python a un archivo MAT-:

from mat4py import savemat

savemat('datafile.mat', data)

El data parámetro será un dict con las variables.

Tener instalado 2014b MATLAB o más reciente, el href="http://www.mathworks.com/help/matlab/matlab-engine-for-python.html" rel="nofollow noreferrer"> motor Python se podrían utilizar:

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat", nargout=1)

Leer el archivo

import scipy.io
mat = scipy.io.loadmat(file_name)

Inspección del tipo de variable MAT

print(type(mat))
#OUTPUT - <class 'dict'>

teclas en el interior del diccionario son variables de MATLAB y valores son los objetos asignados a las variables .

También existe la MATLAB Engine para Python por sí mismo MathWorks. Si tiene MATLAB, esto podría valer la pena considerar (no he probado a mí mismo, pero tiene una funcionalidad mucho más que sólo leer archivos de MATLAB). Sin embargo, no sé si se le permite distribuirlo a otros usuarios (probablemente no es un problema si esas personas han MATLAB. De lo contrario, tal vez NumPy es el camino correcto a seguir?).

Además, si usted quiere hacer todo lo básico a sí mismo, MathWorks proporciona (si los cambios de enlaces, tratan de google para matfile_format.pdf o su MAT-FILE Format título) una documentación detallada sobre la estructura del formato de archivo. No es tan complicado como yo personalmente pensé, pero, obviamente, esta no es la forma más fácil de seguir. También depende de cómo muchas características de los .mat-archivos que desea apoyar.

He escrito un script Python "pequeña" (alrededor de 700 líneas) que puede leer algunos .mat-archivos básicos. No soy ni un experto en Python ni un principiante y me tomó alrededor de dos días para escribir (utilizando la documentación MathWorks vinculado anteriormente). He aprendido un montón de cosas nuevas y fue bastante divertido (la mayor parte del tiempo). Como he escrito el guión de Python en el trabajo, me temo que no puedo publicarla ... Pero puedo dar un consejo aquí:

  • En primer lugar leer la documentación.
  • Utilice un editor hexadecimal (como HxD ) y buscar en una referencia .mat- el archivo que desea analizar.
  • Trate de averiguar el significado de cada byte por el ahorro de los bytes en un archivo .txt y anotar cada línea.
  • Use clases para ahorrar cada elemento de datos (tales como miCOMPRESSED, miMATRIX, mxDOUBLE, o miINT32)
  • La estructura de los .mat-files es óptimo para guardar los elementos de datos en una estructura de datos de árbol; cada nodo tiene una clase y subnodos
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top