wake-up-neo.com

Lesen Sie .mat-Dateien in Python

Ist es möglich, binäre MATLAB-MAT-Dateien in Python zu lesen?

Ich habe gesehen, dass SciPy angeblich das Lesen von .mat-Dateien unterstützt, aber ich bin damit nicht erfolgreich. Ich habe SciPy Version 0.7.0 installiert und kann die Methode loadmat() nicht finden.

324
Gilad Naor

Ein Import ist erforderlich, import scipy.io...

import scipy.io
mat = scipy.io.loadmat('file.mat')
442
Gilad Naor

Weder scipy.io.savemat, Noch scipy.io.loadmat Arbeit für MATLAB-Arrays Version 7.3. Der gute Teil ist jedoch, dass MATLAB-Dateien der Version 7.3 hdf5-Datensätze sind. Sie können also mit einer Reihe von Werkzeugen gelesen werden, einschließlich NumPy .

Für Python benötigen Sie das h5py Erweiterung, für die HDF5 auf Ihrem System erforderlich ist.

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
132
vikrantt

Speichern Sie zuerst die .mat-Datei als:

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

Verwenden Sie danach in Python die übliche Funktion loadmat:

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

Es gibt ein Nice-Paket namens mat4py die einfach mit installiert werden kann

pip install mat4py

Es ist einfach zu bedienen (von der Website):

Daten aus einer MAT-Datei laden

Die Funktion loadmat lädt alle in der MAT-Datei gespeicherten Variablen in eine einfache Python Datenstruktur, wobei nur die Objekte dict und list von Python verwendet werden Numerische und Zellen-Arrays werden in zeilenweise geordnete verschachtelte Listen konvertiert. Arrays werden komprimiert, 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:

from mat4py import loadmat

data = loadmat('datafile.mat')

Die Variable data ist eine dict mit den in der MAT-Datei enthaltenen Variablen und Werten.

Speichere eine Python Datenstruktur in eine MAT-Datei

Python-Daten können mit der Funktion savemat in eine MAT-Datei gespeichert werden. Daten müssen wie für loadmat aufgebaut sein, dh sie sollten aus einfachen Datentypen bestehen, wie dict, list, str, int und float.

Beispiel: Speichern Sie eine Python Datenstruktur in eine MAT-Datei:

from mat4py import savemat

savemat('datafile.mat', data)

Der Parameter data soll ein dict mit den Variablen sein.

13
Cleb

Ab MATLAB 2014b kann die MATLAB-Engine für Python verwendet werden:

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

Lesen der Datei

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

Überprüfung des Typs der MAT-Variablen

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

Die Schlüssel innerhalb des Wörterbuchs sind MATLAB-Variablen und die Werte sind zugewiesene Objekte) zu diesen Variablen.

9
Daksh

Es gibt auch die MATLAB Engine für Python von MathWorks. Wenn Sie über MATLAB verfügen, ist dies möglicherweise eine Überlegung wert (ich habe es selbst nicht ausprobiert, aber es bietet viel mehr Funktionen als nur das Lesen von MATLAB-Dateien). Ich weiß jedoch nicht, ob es zulässig ist, es an andere Benutzer weiterzugeben (es ist wahrscheinlich kein Problem, wenn diese Personen über MATLAB verfügen. Andernfalls ist NumPy möglicherweise der richtige Weg?).

Wenn Sie alle Grundlagen selbst erledigen möchten, von MathWorks bereitgestellt (Wenn sich der Link ändert, suchen Sie bei Google nach matfile_format.pdf Oder dessen Titel MAT-FILE Format) auf die Struktur des Dateiformats. Es ist nicht so kompliziert, wie ich persönlich dachte, aber offensichtlich ist dies nicht der einfachste Weg. Dies hängt auch davon ab, wie viele Funktionen der .mat - Dateien Sie unterstützen möchten.

Ich habe ein "kleines" (ca. 700 Zeilen) Python Skript geschrieben, das einige grundlegende .mat - Dateien lesen kann. Ich bin weder ein Python Experte noch ein Anfänger und es dauerte ungefähr zwei Tage, um es zu schreiben (unter Verwendung der oben verlinkten MathWorks-Dokumentation). Ich habe viel Neues gelernt und es hat ziemlich viel Spaß gemacht (die meiste Zeit). Da ich das Skript Python bei der Arbeit geschrieben habe, kann ich es leider nicht veröffentlichen ... Aber ich kann hier einige Ratschläge geben:

  • Lesen Sie zuerst die Dokumentation.
  • Verwenden Sie einen Hex-Editor (z. B. HxD ) und suchen Sie in einer Referenzdatei .mat, Die Sie analysieren möchten.
  • Versuchen Sie, die Bedeutung jedes Bytes herauszufinden, indem Sie die Bytes in einer TXT-Datei speichern und jede Zeile mit Anmerkungen versehen.
  • Verwenden Sie Klassen, um jedes Datenelement zu speichern (z. B. miCOMPRESSED, miMATRIX, mxDOUBLE oder miINT32).
  • Die Struktur der .mat - Dateien ist optimal zum Speichern der Datenelemente in einer Baumdatenstruktur. Jeder Knoten hat eine Klasse und Unterknoten
5
mozzbozz