Matlab struct importieren: Frage zu Numpy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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!
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.
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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?
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.
Antworten