¿Es posible leer archivos binarios MATLAB .mat en Python?
He visto que SciPy presuntamente admite la lectura de archivos .mat, pero no lo he logrado. Instalé SciPy versión 0.7.0, y no puedo encontrar el loadmat()
método.
Se requiere una importación, import scipy.io
...
import scipy.io
mat = scipy.io.loadmat('file.mat')
save('myfile.mat','-v7')
Ni
scipy.io.savemat
, niscipy.io.loadmat
funcionan para matrices MATLAB versión 7.3. Pero lo bueno es que los archivos MATLAB versión 7.3 son conjuntos de datos hdf5. Por lo tanto, se pueden leer con una serie de herramientas, incluida NumPy .Para Python, necesitará la
h5py
extensión, que requiere HDF5 en su sistema.fuente
save
(al menos en Matlab R2014b) da como resultado un archivo que no se puede leer utilizando la técnica anterior. Si utiliza el indicador '-v7.3', los datos numéricos se pueden leer muy bien.save('filename', '-v7.3', 'var1');
Primero guarde el archivo .mat como:
Después de eso, en Python, use la
loadmat
función habitual :fuente
Hay un buen paquete llamado
mat4py
que se puede instalar fácilmente usandoEs fácil de usar (desde el sitio web):
Cargar datos de un archivo MAT
La función
loadmat
carga todas las variables almacenadas en el archivo MAT en una estructura de datos Python simple, usando solo Pythondict
ylist
objetos. Las matrices numéricas y de celdas se convierten en listas anidadas ordenadas por filas. Las matrices se comprimen para eliminar las matrices con un solo elemento. La estructura de datos resultante se compone de tipos simples que son compatibles con el formato JSON .Ejemplo: Cargue un archivo MAT en una estructura de datos de Python:
La variable
data
es adict
con las variables y valores contenidos en el archivo MAT.Guardar una estructura de datos de Python en un archivo MAT
Python de datos se pueden guardar en un archivo MAT, con la función
savemat
. De datos tiene que estar estructurado de la misma manera que paraloadmat
, es decir, debe estar compuesta de tipos de datos simples, comodict
,list
,str
,int
, yfloat
.Ejemplo: guardar una estructura de datos de Python en un archivo MAT:
El parámetro
data
será adict
con las variables.fuente
mat4py/cmd.py my.mat
escribemy.json
, 1 línea larga)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Con MATLAB 2014b o una versión más reciente instalada, se podría usar el motor MATLAB para Python :
fuente
Leyendo el archivo
Inspeccionar el tipo de variable MAT
Las claves dentro del diccionario son variables de MATLAB , y los valores son los objetos asignados a esas variables .
fuente
También está el motor MATLAB para Python de MathWorks. Si tiene MATLAB, vale la pena considerarlo (no lo he probado yo mismo, pero tiene mucha más funcionalidad que solo leer archivos de MATLAB). Sin embargo, no sé si está permitido distribuirlo a otros usuarios (probablemente no sea un problema si esas personas tienen MATLAB. De lo contrario, ¿quizás NumPy es el camino correcto?).
Además, si desea hacer todo lo básico usted mismo, MathWorks proporciona (si el enlace cambia, intente buscar en google
matfile_format.pdf
o su títuloMAT-FILE Format
) una documentación detallada sobre la estructura del formato de archivo. No es tan complicado como pensaba personalmente, pero obviamente, esta no es la forma más fácil de hacerlo. También depende de cuántas características del.mat
archivos desee admitir.He escrito un script Python "pequeño" (aproximadamente 700 líneas) que puede leer algunos
.mat
archivos básicos . No soy ni un experto en Python ni un principiante y me llevó cerca de dos días escribirlo (usando la documentación de MathWorks vinculada anteriormente). Aprendí muchas cosas nuevas y fue bastante divertido (la mayoría de las veces). Como he escrito el script de Python en el trabajo, me temo que no puedo publicarlo ... Pero puedo dar algunos consejos aquí:.mat
archivo de referencia que desee analizar.miCOMPRESSED
,miMATRIX
,mxDOUBLE
, omiINT32
).mat
estructura de los archivos es óptima para guardar los elementos de datos en una estructura de datos de árbol; cada nodo tiene una clase y subnodosfuente
Puede usar el código anterior para leer el archivo .mat guardado predeterminado en Python.
fuente