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()
)
8 answers
Tonta de mí. Olvidé importar io...
import scipy.io
mat = scipy.io.loadmat('file.mat')
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
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')
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)
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 (como
miCOMPRESSED
,miMATRIX
,mxDOUBLE
omiINT32
) - 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
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.
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 /
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.
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