Matlab .mat einlesen

Hallo zusammen,

ich hab eine Matlab Datei .mat. In der Regel lässt sich eine .m Datei problemlos mit einem TextEditor öffnen um den Inhalt einzulesen. Hier habe ich ein Sonderzeichensalat.
Über Matlab hab ich es natürlich als erstes mit lad (‚Dateiname.mat‘) versuchen und ich bekam dann im Workspace weitere Unterordner. Nun hab ich ein Unterordner mit einer Datei (20x4x29436 double) gefunden den ich aber nicht öffnen kann, da diese zu viele Zeichen (variablen) beinhaltet. Für mich sind bestimmte Werte in der Datei interessant, die auch gelabelt sind. Auch ist im Workspace die Werte mit den jeweiligen Labels vorhanden aber halt nur z.B. „RightHand“, die Werte sind im Data, die zu groß ist. Hat jemand ein Tipp?
Die ursprüngliche Datei wurde in eine Matlab (.mat) Datei exportiert und ich habe als Inhalt (Trajektorie) z.B. HandRight (Label) und drunter sind jede Menge Koordinaten gespeichert. Ich möchte am Ende diese Werte ausgeben und dann ein Diagramm erstellen.

Ich bin in Matlab ein richtiger noob :frowning: habe aber gegoogelt und ein bisschen rumprobiert. Weit bin ich leider nicht gekommen. Vorschläge oder auch nur Tipps wären sehr hilfreich.

Ich bin bedanke mich alleine schon fürs lesen :smile:

mfg
Brin

Hallo,
erstmal ganz generell vorab: Matlab ab Version 7.3 benutzt HDF5 als Dateiformat. Weißt Du zufällig, welche Matlabversion die Datei geschrieben hat?

Dann zweite Frage: Ein Array der Größe 20x4x29436 belegt im Arbeitsspeicher ca. 18 GB. Wenn Matlab sagt, das sei zu groß, kann es sein, daß Dein Rechner weniger als 18 GB RAM hat?

Insgesamt ist Dein Ansatz richtig:

> load('DATEI.mat)

liest alle Matrizen in die Arbeitsumgebung, von da aus kann man dann weiterarbeiten.

Wenn Du Dich für einige wenige Unterräume interessierst und die .mat-Datei eigentlich eine HDF5-Datei ist, dann kann man die auch via h5file öffnen und „slice“-weise auslesen. Einzelheiten gibt’s, wenn Du mir das Dateiformat bestätigst.

Ein double-Wert belegt 8 Byte. Damit komme ich auf ca. 18MB. Woher nimmst du den Faktor 1000?

Gruß,

Kannitverstan

Völlig korrekt. Es sind 18 MB.

Vielen Dank für die schnelle Antwort.

Die Datei wurde über die Software „Qualisys Track Manager“ (https://www.qualisys.com/software/qualisys-track-manager/) ins Matlab .mat Format exportiert. Deshalb kann ich dir das nicht genau beantworten, aber da das Programm nicht so alt ist, gehe ich von aus, dass die exportierte .mat Datei die HDF5 Formatierung hat.

Also, sofern hier MB gemeint sind, hat sich ja wohl die Frage erübrigt. Habe 8 GB RAM :smiley:
Die genaue Fehlermeldung lautet: Cannot display summaries of variables with more than 524288 elements.

Habe ich etwas ausgelassen? Screenshots kann ich natürlich noch hinzufügen, falls es hilfreich ist.

Gruß
Brin

Schon mal gehört, dass es verschiedene Versionen gibt? Vielleicht sogar eine Demo-Version mit eingeschränktem Umfang?

Also: wovon genau redest du?

Falls du meine Matlab Version meinst, ich habe Matlab R2017a und zwar eine Vollversion. Schon klar das bei einer Demo-Version die Funktionen eingeschränkt sind.
Also: Was genau ist deine Frage bzw. was genau ist für dich noch unklar?

Aaah, jetzt weiß ich. Das ist gar kein Fehler. Eher sagt Dir lediglich, daß Du das Array nicht im Workspace drucken lassen kannst, wäre ohnehin nur bildschirmweise Zahlenoutput. Du kannst aber damit ganz normal arbeiten.

Nehmen wir an die Variable heißt A, dann sollte gehen:

> A(1,2,1)
> image(A)

Du hast vorher gesagt, daß Du ohnehin nur Teile brauchst, mit A(:,1,1) holst Du Dir die ersten Elemente entlang der 1. Dimension (die mit der Länge 20), mit A(:, :, 1) die erste 20x4 Matrix, usw.

Das image ist vermutlich schwer zu interpretieren, aber es sind 20 Punkte auf der X-, 4 auf der Y-Achse, denen dann 29436 Farben zugeordnet sind.

2 Like

Das bekomme ich wenn ich mit "load (‚Filename.mat‘) die gewünschte .mat Datei öffne.

Bildschirmfoto 2019-04-04 um 12.00.00

danach gehe ich auf Trajectories und sehe

Bildschirmfoto 2019-04-04 um 12.00.31

mich interessieren ja nur die labeled Dateien.

Bildschirmfoto 2019-04-04 um 12.00.50

Wenn ich Labels öffne habe ich also einzelne Variablen-Namen denen keine Werte dort zugeordnet sind.
Diese Werte sind denke ich in „Data 20x4x29436 double“ enthalten.

Da ist wieder meine ursprüngliche Frage. Wie krieg ich die Werte vom Label „xxxx“?

Also, ich kenne zwar die Daten nicht, aber soweit ich sehe: Trajectories.Labeled.Data(xxx, :, :), wobei xxx der Index von Label xxxx ist, sprich eine Zahl von 1 bis 20.

Sorry mein Fehler! Mit xxxx meinte ich damit eine x-beliebige Variable hehe.
Also das war das erste was ich probiert hatte am Anfang mit Trajectories.Labeled.Data aber die klammern hab ich nicht gemacht und die komplette Datei Bezeichnung hat auch gefehlt.
Nun hab ich das auch so hinbekommen und erhalte meine Werte, vielen Dank dafür!
Ich möchte diese in eine Excel Tabelle einfügen. Das mache ich ja mit xlswrite, soweit so gut. Aber irgendwo hab ich da nen Fehler.

habe das wie folgt versucht:

HandR = xxx.Trajectories.Labeled.Data(11,:,:);
xlswrite(HandR, ‚test.xlsx‘, A)

so geht es nicht. Also um das in den Klammern zu verstehen…
HandR sind die Daten die ich haben will für Excel, test.xlsx ist die Bezeichnung für die erstellte Excel Datei und A die Spalte in der Excel Datei.
Was ist mein Fehler?

Gruß
Brin

Ich bin mal so frei und beantworte mir meine Frage hehe.
Mit einem iMac harmoniert es sich nicht gut xlswrite über Matlab zu programmieren.
Habe stattdessen einfach csvwrite angewendet und bekommen was ich wollte, mehr oder weniger.
Bekomme aber auf meinem win Laptop einen Fehler beim xlswrite…

@hroptatyr ich Danke dir vielmals für deine Mühe und Hilfe! :clap:

1 Like