Seite 1 von 1

Matlab struct importieren: Frage zu Numpy

Verfasst: Montag 28. September 2015, 14:31
von gerald123
Hallo,

beim Importieren von Matlab Strukturen sind ein paar Fragen aufgetaucht:
Matlab struct (test.mat):
test.x = [1,2,3]
test.y = [2,3,4]
test.z = [3,4,5]
Importieren in Python

Code: Alles auswählen

import scipy.io as sio
result= io.loadmat("D:\\test.mat")
array([[([[1, 2, 3, ]], [[2, 3, 4]], [[3, 4, 5, ]])]],
dtype=[('x', 'O'), ('y', 'O'), ('z', 'O')])}
Frage. res ist vom type "dict" --> was bedeutet dtype? Was bedeutet 'O'?
Wie kann ich jetzt auf die einzlenen Wert zugreifen? Ich habe folgenden Befehlt gefunden:

Code: Alles auswählen

x = data[0,0]['x']
Funktioniert - es is mir aber nicht klar, wie und warum das so funktionert.

Vielen Dank für eure Hilfe!

Re: Matlab struct importieren: Frage zu Numpy

Verfasst: Montag 28. September 2015, 14:52
von BlackJack
@gerald123: `dtype` ist der Datentyp eines Arrayeintrags. Das ist ein Recordarray wie es aussieht weil es nicht *einen* Typ gibt sondern pro Spalte einen. Die Spalten haben Namen, also ist jeder Eintrag in `dtype` ein Tupel aus Name und Typkürzel. 'O' steht dabei für *O*bject, also ein Python-Objekt.

Re: Matlab struct importieren: Frage zu Numpy

Verfasst: Montag 28. September 2015, 16:05
von gerald123
Vielen Dank für deine Antwort.
Sehe ich das richtig: Über den Namen spreche ich das "Python-Objekt" an?

Wie erzeuge ich ein Python Objekt?

Re: Matlab struct importieren: Frage zu Numpy

Verfasst: Montag 28. September 2015, 17:58
von BlackJack
@gerald123: Äh, Python-Objekt meint wirklich genau das: ein Python-Objekt, also jedes beliebige Objekt in Python ist ein Python-Objekt. Halt als Abgrenzung zu den speziellen Numpy-Typen.

Eventuell möchtest Du bei `loadmat()` das Argument `squeeze_me` als ``True`` übergeben, dann werden 1×1 Arrays um einzelne Werte weggelassen und der nicht so sinnvoll erscheinende ``[0,0]``-Zugriff kann wegfallen. Ich nehme mal an das diese 1×1-Arrays nur um die Daten sind weil Matlab das so speichert und man ohne dieses eigentlich unsinnige Array die Daten nicht wieder in einer `*.mat`-Datei speichern kann ohne das sich für Matlab etwas ändert.