Ich habe eine .mat-Datei aus Matlab 2012b generiert. Es enthält eine Variable mit einer benutzerdefinierten Matlab-Klasse.
Beim Laden der Datei mit scipy.io.loadmat in Python 3.3 bekomme ich Folgendes:
%Vor%Ich möchte auf das "futureDS" -Objekt vom Typ "cStream" zugreifen, scheint dies jedoch nicht mit mat ['None'] zu tun. Der Aufruf von mat ['None'] führt zu folgenden Ergebnissen:
%Vor%Ich stecke hier fest. Ich bin neu bei Python und versuche meine alte Arbeit von Matlab zu portieren. Jede Hilfe wäre willkommen.
Danke.
SciPy unterstützt leider keine mat-Dateien, die Klassenobjekte im neuen Stil enthalten (die mit classdef
definiert wurden), oder, soweit mir bekannt ist, keinen Mat-File-Reader von Drittanbietern. Das __function_workspace__
-Element im zurückgegebenen mat
-Wörterbuch enthält die Information, nach der Sie suchen, und zwar in nicht dokumentierter und noch nicht rekursiver Weise.
Die einfachste Lösung besteht darin, Ihre benutzerdefinierten Klassen in grundlegende struct
-Objekte in Matlab zu konvertieren, bevor Sie sie auf der Festplatte speichern. Dies kann erreicht werden (wenn auch mit einer Warnung), indem einfach struct(futureDS)
aufgerufen wird. Es stellt alle öffentlichen und privaten Eigenschaften als einfache Felder zur Verfügung, die von jedem Leser eines Drittanbieters gelesen werden können.
(Technisch gesehen speichert Matlab diese Objekte mit der ID 17 des Matlab Array-Typs; die offizielle Dokumentation ( PDF) zählt nur Typen bis 15) auf.