Leer.archivos mat en Python


¿Alguien tiene experiencia exitosa leyendo Matlab binario .¿archivos mat en Python?

(He visto que scipy ha alegado apoyo para la lectura .archivos mat, pero no tengo éxito con él. He instalado scipy la versión 0.7.0, y no puedo encontrar el método loadmat())

Author: Amro, 2009-05-17

8 answers

Tonta de mí. Olvidé importar io...

import scipy.io
mat = scipy.io.loadmat('file.mat')
 367
Author: Gilad Naor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-17 12:16:13

Ni scipy.io.savemat, ni scipy.io.loadmat funcionan para matrices matlab v v7.3. Pero lo bueno es que los archivos matlab v v7.3 son conjuntos de datos hdf5. Por lo que se pueden leer utilizando una serie de herramientas, incluyendo numpy.

Para 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 numpy array
 103
Author: vikrantt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-02 08:28:04

He jodido media hora incluso después de leer las respuestas. Espero que esta respuesta ayude

Primero guarde el archivo mat como

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

Después de eso en Python use el loadmat habitual

import scipy.io as sio
test = sio.loadmat('test.mat')
 19
Author: Bhanu Pratap Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-16 13:25:39

Con Matlab 2014b o posterior instalado, se podría usar el motor Matlab para Python:

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
 9
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-06 22:58:25

También existe el Motor MATLAB para Python de MathWorks mismo. Si tiene Matlab, esto podría valer la pena considerarlo (no lo he probado yo mismo, pero tiene mucha más funcionalidad que solo leer archivos Matlab). Sin embargo, no se si está permitido distribuirlo a otros usuarios (probablemente no hay problema si esas personas tienen Matlab, de lo contrario tal vez NumPy es el camino correcto a seguir?).

Además, si desea hacer todos los conceptos básicos usted mismo, MathWorks proporciona (si el enlace cambia, intente buscar en google matfile_format.pdf o su título MAT-FILE Format) una documentación detallada sobre la estructura del formato de archivo. No es tan complicado como personalmente pensé, pero obviamente, esta no es la manera más fácil de ir. También depende de cuántas características de los archivos .mat desea admitir.

He escrito un script Python "pequeño" (alrededor de 700 líneas) que puede leer algunos archivos básicos .mat. No soy ni un experto en Python ni un principiante y me llevó unos dos días escribirlo (usando la documentación de MathWorks enlazada anteriormente). He aprendido muchas cosas nuevas y fue bastante divertido (la mayoría de las veces). Como he escrito el script Python en el trabajo, me temo que no puedo publicarlo... Pero puedo dar algunos consejos aquí:

  • Primero lea la documentación
  • Use un editor hexadecimal (como HxD ) y busque un archivo de referencia .mat que desee analizar
  • Intente averiguar el significado de cada Byte guardando los Bytes en un archivo txt y anote cada uno línea
  • Utilice clases para guardar cada elemento de datos (comomiCOMPRESSED, miMATRIX, mxDOUBLE o miINT32)
  • La estructura .mat-files es óptima para guardar los elementos de datos en una estructura de datos de árbol; cada nodo tiene una clase y subnodos
 5
Author: mozzbozz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-30 16:10:03

Leyendo el archivo

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

Insecting the type of mat variable

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

Las claves dentro del diccionario son variables matlab y los valores son los objetos asignados a esas variables.

 4
Author: Daksh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-05 17:10:41

Los archivos Hdf5 también se pueden tratar mediante PyTables. Su FAQ tiene una entrada que se compara con h5py: https://pytables.github.io/FAQ.html . PyTables también viene con el práctico visualizador ViTables: http://vitables.org/galleries/Screenshots /

 2
Author: aquercia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-16 21:17:15

Hay un buen paquete llamado mat4py que se puede instalar fácilmente usando

pip install mat4py

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

Cargar datos desde MAT-file

La función loadmat carga todas las variables almacenadas en el archivo MAT en una estructura de datos simple de Python, usando solo los objetos dict y list de Python. Las matrices numéricas y de celdas se convierten en listas anidadas ordenadas por filas. Los arrays se exprimen para eliminar los arrays con un solo elemento. La estructura de datos resultante se compone de tipos simples que son compatibles con el formato JSON.

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

data = loadmat('datafile.mat')

La variable data es una dict con las variables y valores contenidos en el archivo MAT.

Guardar la estructura de datos de Python en un archivo MAT

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

Ejemplo: Guardar una estructura de datos de Python en un archivo MAT:

savemat('datafile.mat', data)

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

 2
Author: Cleb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-23 14:06:31