Ist es möglich, binäre MATLAB .mat-Dateien in Python zu lesen?
Ich habe gesehen, dass SciPy angeblich Unterstützung für das Lesen von .mat-Dateien hat, aber ich bin damit nicht erfolgreich. Ich habe SciPy Version 0.7.0 installiert und kann die loadmat()
Methode nicht finden .
save('myfile.mat','-v7')
Weder
scipy.io.savemat
nochscipy.io.loadmat
für MATLAB-Arrays Version 7.3. Das Gute daran ist jedoch, dass MATLAB-Dateien der Version 7.3 HDF5-Datensätze sind. Sie können also mit einer Reihe von Tools gelesen werden, darunter NumPy .Für Python benötigen Sie die
h5py
Erweiterung, für die HDF5 auf Ihrem System erforderlich ist.quelle
save
(zumindest in Matlab R2014b) führt zu einer Datei, die mit der oben beschriebenen Technik nicht gelesen werden kann. Wenn Sie das Flag '-v7.3' verwenden, können die numerischen Daten einwandfrei gelesen werden.save('filename', '-v7.3', 'var1');
Speichern Sie zuerst die .mat-Datei als:
Verwenden Sie danach in Python die übliche
loadmat
Funktion:quelle
Es gibt ein schönes Paket namens,
mat4py
das einfach mit installiert werden kannEs ist einfach zu bedienen (von der Website):
Laden Sie Daten aus einer MAT-Datei
Die Funktion
loadmat
lädt alle in der MAT-Datei gespeicherten Variablen in eine einfache Python-Datenstruktur und verwendet nur Pythonsdict
undlist
Objekte. Numerische und Zellen-Arrays werden in verschachtelte Listen mit Zeilenreihenfolge konvertiert. Arrays werden zusammengedrückt, um Arrays mit nur einem Element zu entfernen. Die resultierende Datenstruktur besteht aus einfachen Typen, die mit JSON kompatibel sind Format .Beispiel: Laden Sie eine MAT-Datei in eine Python-Datenstruktur:
Die Variable
data
ist adict
mit den in der MAT-Datei enthaltenen Variablen und Werten.Speichern Sie eine Python-Datenstruktur in einer MAT-Datei
Python-Daten können mit der Funktion in einer MAT-Datei gespeichert werden
savemat
. Daten haben in der gleichen Art und Weise strukturiert werden wieloadmat
, dh es einfache Datentypen zusammengesetzt sein sollte, wiedict
,list
,str
,int
, undfloat
.Beispiel: Speichern Sie eine Python-Datenstruktur in einer MAT-Datei:
Der Parameter
data
muss adict
mit den Variablen sein.quelle
mat4py/cmd.py my.mat
schreibtmy.json
, 1 lange Zeile.)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Wenn MATLAB 2014b oder höher installiert ist, kann die MATLAB-Engine für Python verwendet werden:
quelle
Datei lesen
Überprüfen des Typs der MAT-Variablen
Die Schlüssel im Wörterbuch sind MATLAB-Variablen , und die Werte sind die Objekte, die diesen Variablen zugewiesen sind .
quelle
Es gibt auch die MATLAB Engine für Python von MathWorks. Wenn Sie MATLAB haben, ist dies möglicherweise eine Überlegung wert (ich habe es nicht selbst ausprobiert, aber es bietet viel mehr Funktionen als nur das Lesen von MATLAB-Dateien). Ich weiß jedoch nicht, ob es erlaubt ist, es an andere Benutzer zu verteilen (es ist wahrscheinlich kein Problem, wenn diese Personen MATLAB haben. Andernfalls ist NumPy vielleicht der richtige Weg?).
Wenn Sie alle Grundlagen selbst erledigen möchten, bietet MathWorks (wenn sich der Link ändert, versuchen Sie, nach Google
matfile_format.pdf
oder seinem Titel zu suchenMAT-FILE Format
) eine detaillierte Dokumentation zur Struktur des Dateiformats. Es ist nicht so kompliziert, wie ich persönlich dachte, aber offensichtlich ist dies nicht der einfachste Weg. Es hängt auch davon ab, wie viele Funktionen der.mat
Dies Dateien Sie unterstützen möchten.Ich habe ein "kleines" Python-Skript (ca. 700 Zeilen) geschrieben, das einige grundlegende
.mat
Dateien lesen kann. Ich bin weder ein Python-Experte noch ein Anfänger, und ich habe ungefähr zwei Tage gebraucht, um es zu schreiben (unter Verwendung der oben verlinkten MathWorks-Dokumentation). Ich habe viele neue Sachen gelernt und es hat ziemlich viel Spaß gemacht (die meiste Zeit). Da ich das Python-Skript bei der Arbeit geschrieben habe, kann ich es leider nicht veröffentlichen ... Aber ich kann hier einige Ratschläge geben:.mat
die Sie analysieren möchten.miCOMPRESSED
,miMATRIX
,mxDOUBLE
, odermiINT32
).mat
Struktur der -files ist optimal zum Speichern der Datenelemente in einer Baumdatenstruktur. Jeder Knoten hat eine Klasse und Unterknotenquelle
Sie können den obigen Code verwenden, um die standardmäßig gespeicherte .mat-Datei in Python zu lesen.
quelle