Frage

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

Ich habe gesehen, dass SciPy Unterstützung .mat Dateien zum Lesen, angeblich hat, aber ich bin nicht erfolgreich mit ihm. Ich installierte SciPy Version 0.7.0, und ich kann die loadmat() Methode nicht gefunden.

War es hilfreich?

Lösung

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

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

Andere Tipps

Weder scipy.io.savemat noch scipy.io.loadmat Arbeit für MATLAB-Arrays Version 7.3. Aber das Gute ist, dass MATLAB-Version 7.3-Dateien sind hdf5 Datensätze. So können sie mit einer Reihe von Tools gelesen werden, einschließlich NumPy .

Für Python, Sie werden die h5py Erweiterung benötigen, die HDF5 auf Ihrem System erfordert.

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

Zuerst speichern Sie die Datei als .mat:

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

Danach wird in Python, verwenden Sie die übliche loadmat Funktion:

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

Es gibt ein schönes Paket namens mat4py , die leicht installiert werden kann mit

pip install mat4py

Es ist einfach (von der Website) zu verwenden:

Laden von Daten aus einer MAT-Datei

Die Funktion loadmat lädt alle Variablen in der MAT-Datei in eine einfache Python-Datenstruktur gespeichert sind, nur dict und list Objekte Python verwenden. Numerische und Zellenfelder umgewandelt werden verschachtelte Listen Reihenordnung. Arrays sind gepresste Arrays mit nur einem Element zu beseitigen. Die sich ergebende Datenstruktur besteht aus einfachen Typen zusammengesetzt, die mit dem JSON Format.

Beispiel: Laden eine MAT-Datei in eine Datenstruktur Python:

from mat4py import loadmat

data = loadmat('datafile.mat')

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

Speichern Sie eine Python-Datenstruktur zu einer MAT-Datei

Python-Daten können auf eine MAT-Datei gespeichert werden, mit der Funktion savemat. Daten haben in der gleichen Art und Weise strukturiert werden wie für loadmat, das heißt es von einfachen Datentypen zusammengesetzt sein sollte, wie dict, list, str, int und float.

Beispiel: Speichern Sie eine Python-Datenstruktur zu einer MAT-Datei:

from mat4py import savemat

savemat('datafile.mat', data)

Der Parameter data soll ein dict mit den Variablen sein.

Mit MATLAB 2014b oder neuer installiert ist, die MATLAB-Engine für Python verwendet werden könnte:

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

Lesen Sie die Datei

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

Prüfen Sie die Art der MAT Variable

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

Die Tasten in der Wörterbuch sind MATLAB Variablen und die Werte sind die Objekte dieser Variablen zugewiesen .

Es gibt auch die MATLAB-Engine für Python von MathWorks selbst. Wenn Sie MATLAB haben, könnte dies eine Überlegung wert, (ich habe es selbst nicht versucht, aber es hat viel mehr Funktionen als nur das Lesen von MATLAB-Dateien). Aber ich weiß nicht, ob es sie an andere Benutzer verteilen darf (es wahrscheinlich kein Problem ist, wenn diese Personen MATLAB haben. Ansonsten vielleicht NumPy ist der richtige Weg zu gehen?).

Auch, wenn Sie sich die Grundlagen tun wollen, MathWorks bietet (wenn die Verbindung ändert, versuchen, für matfile_format.pdf oder seinen Titel MAT-FILE Format googeln) eine ausführliche Dokumentation über die Struktur des Dateiformats. Es ist nicht so kompliziert, wie ich persönlich gedacht, aber offensichtlich ist dies nicht der einfachste Weg zu gehen. Es hängt auch davon ab, wie viele Merkmale der .mat-Dateien, die Sie unterstützen möchten.

Ich habe einen „kleinen“ (ca. 700 Zeilen) Python-Skript geschrieben, das einige grundlegenden .mat-Dateien lesen kann. Ich bin weder ein Python-Experte noch ein Anfänger und es dauerte etwa zwei Tage, es zu schreiben (die MathWorks Dokumentation oben verlinkten verwendet wird). Ich habe viele neue Sachen gelernt und es war ganz lustig (die meiste Zeit). Wie ich das Python-Skript bei der Arbeit geschrieben habe, ich fürchte, ich kann es nicht veröffentlichen können ... Aber ich kann ein paar Ratschläge geben hier:

  • Lesen Sie zuerst die Dokumentation.
  • Verwenden Sie einen Hex-Editor (wie HxD ) und schaut in eine Referenz .mat- Datei, die Sie wollen, zu analysieren.
  • Versuchen Sie, die Bedeutung jedes Byte, um herauszufinden, indem die Bytes in eine TXT-Datei zu speichern und jede Zeile mit Anmerkungen versehen.
  • Verwenden Sie Klassen jedes Datenelement (wie miCOMPRESSED, miMATRIX, mxDOUBLE oder miINT32)
  • speichern
  • Die .mat-Dateien Struktur ist optimal für die Datenelemente in einer Baumdatenstruktur Einsparung; Jeder Knoten hat eine Klasse und Unterknoten
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top