Domanda

È possibile leggere il binario di MATLAB .mat file in Python?

Ho visto che SciPy ha dichiarato il supporto per la lettura .mat file, ma io sono riuscito con esso.Ho installato SciPy versione 0.7.0, e non riesco a trovare il loadmat() metodo.

È stato utile?

Soluzione

È necessaria un'importazione, import scipy.io ...

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

Altri suggerimenti

scipy.io.savemat, nè lavoro scipy.io.loadmat per MATLAB array versione 7.3. Ma la parte buona è che la versione di MATLAB 7.3 file sono insiemi di dati HDF5. In modo che possano essere letti utilizzando una serie di strumenti, tra cui NumPy .

Per Python, sarà necessario il prolungamento h5py, che richiede HDF5 sul 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

Per prima salvare il file .mat come:

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

Dopo di che, in Python, utilizzare la solita funzione di loadmat:

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

C'è un bel pacchetto chiamato mat4py che può essere facilmente installato utilizzando

pip install mat4py

È semplice da usare (dal sito):

Caricare i dati da un MAT-file

La funzione loadmat carica tutte le variabili memorizzate nella MAT-file in un semplice Python struttura di dati, utilizzando solo Python dict e list oggetti.Numerici e le celle vengono convertiti in fila ordinata liste nidificate.Le matrici sono spremuto per eliminare l'array con un solo elemento.I dati risultanti struttura è composta di tipi semplici che sono compatibili con la JSON formato.

Esempio:Caricare un MAT-file in Python struttura di dati:

from mat4py import loadmat

data = loadmat('datafile.mat')

La variabile data è un dict con le variabili e i valori contenuti nella MAT-file.

Salvare un Pitone struttura di dati per una MAT-file

Python dati possono essere salvati su una STUOIA di file, con la funzione savemat.I dati devono essere strutturati nello stesso modo come per loadmat, cioèesso dovrebbe essere composto di tipi di dati semplici, come dict, list, str, int, e float.

Esempio:Salvare un Pitone struttura di dati per una MAT-file:

from mat4py import savemat

savemat('datafile.mat', data)

Il parametro data deve essere un dict con le variabili.

Avere MATLAB 2014b o più recente installato, il motore di MATLAB per Python potrebbero essere utilizzati:

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

Leggere il file

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

Controllo del tipo di variabile MAT

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

chiavi all'interno del dizionario sono variabili MATLAB e Valori sono le oggetti assegnati a tali variabili .

C'è anche la MATLAB Motore per Python da MathWorks stesso.Se si dispone di MATLAB, questa potrebbe essere la pena di considerare (non ho provato io stesso, ma ha un sacco di funzionalità in più che solo la lettura di file MATLAB).Tuttavia, non so se è consentito distribuire ad altri utenti (probabilmente non è un problema se queste persone non sono MATLAB.In caso contrario, forse NumPy è la strada giusta da percorrere?).

Inoltre, se si vuole fare tutte le basi di te, MathWorks fornisce (se il link cambia, prova a google per matfile_format.pdf o il suo titolo MAT-FILE Format) una documentazione dettagliata sulla struttura del formato di file.Non è così complicato come ho personalmente pensato, ma, ovviamente, questo non è il modo più semplice per andare.Dipende anche da quante funzioni del .mat-i file che si desidera supportare.

Ho scritto un "piccolo" (circa 700 linee) script Python in grado di leggere alcuni di base .mat-i file.Io non sono né un esperto di Python, né un principiante e mi ci sono voluti due giorni per scrivere (con la MathWorks documentazione linkato sopra).Ho imparato un sacco di cose nuove ed è stato abbastanza divertente (la maggior parte del tempo).Come ho scritto lo script Python al lavoro, ho paura di non pubblicarlo...Ma mi può dare qualche consiglio qui:

  • Prima di leggere la documentazione.
  • Utilizzare un editor esadecimale (come HxD) e guardare in un riferimento .mat-file che si desidera analizzare.
  • Cercare di capire il significato di ogni byte per salvare il byte .file txt e annotare ogni linea.
  • Utilizzare le classi per salvare ogni elemento di dati (come miCOMPRESSED, miMATRIX, mxDOUBLE, o miINT32)
  • Il .mat-file' struttura è ottimale per il salvataggio gli elementi di dati in un albero struttura di dati;ogni nodo ha una classe e sottonodi
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top