Warum wird "0x0 empty struct array with fields:" ausgegeben?

3 views (last 30 days)
Hallo,
ich möchte eine Datenstruktur erstellen und verstehe den Unterschied zwischen diesen beiden Zeilen nicht so richtig:
Beispiel 01: p01 = struct('name','p01','x',1,'y',6,'U',[0]);
% in der folgenden Zeile habe ich mich an einem Beispiel aus dem Help Center (Thema: struct) orientiert:
Beispiel 02: p01 = struct('name','p01','x',1,'y',6,'U',{});
Beispiel 01: Die Eingabe p01 im Command Window gibt die Feldnamen und ihre Werte zurück. Gleiches passiert wenn ich die Matrix-Schreibweise [0] durch die cell array Schreibweise {0} ersetze. In diesem Fall kann ich die Werte einzelner Felder ausgeben lassen, z.B. p01.name
Beispiel 02: Warum bekomme ich als Antwort 0x0 empty struct array with fields? Ich habe allen Feldern Werte zugewiesen. Bis auf das Feld 'U'. Das ist leer. Die Ausgabe einzelner Feldwerte liefert ein leeres Ergebnis: p01.name
Ist es nicht möglich, eine Struktur zu definieren in der nur ein Teil der Felder mit Werten belegt ist und der andere Teil der Felder noch leer ist?
Vielen Dank!
Lisa

Answers (2)

Harald
Harald on 3 May 2024
Hallo Lisa,
du erreichst das gewünschte mit
p01 = struct('name','p01','x',1,'y',6,'U',{{}})
Dass dein Code nicht das gleiche liefert, mag zwar merkwürdig erscheinen, ist aber für die Konsistenz mit nicht-skalaren Cell Arrays nötig und so dokumentiert:
  • If value is an empty cell array {}, then s is an empty (0-by-0) structure.
Viele Grüße,
Harald
  2 Comments
Elisabeth
Elisabeth on 6 May 2024
Vielen Dank für die Antwort!
Struktur mit leerem Feld
s = struct('f1','a','f2',[])
Wie verwandt sind [] und {{}}?
s1 = struct('f1','a','f2',[])
s2 = struct('f3','b','f4',{{}})
In s1 ist der Wert des Felds f2 eine leere Matrix (wieviel Speicher reserviert Matlab dafür?) und in s2 ist der Wert des Felds f4 eine wiederum eine leere Struktur. D.h. s2 wird zu einer verschachtelten Struktur? Wieviel Speicher wird für den Wert von f4 reserviert?
Viele Grüße
Lisa
Harald
Harald on 6 May 2024
Hallo Lisa,
[ ] ist ein leeres Double-Array, { } ein leeres Cell-Array - und das ist somit der Wert des Felds f4. s2 wird also ein Struct, das ein Cell enthält.
Der Speicherbedarf für leere Arrays dürfte minimal sein. Gibt es einen speziellen Grund für die Frage?
Viele Grüße,
Harald

Sign in to comment.


Elisabeth
Elisabeth on 10 May 2024
Hallo Harald,
ich habe mir einfach die Frage gestellt weil man den Datentyp und damit den Speicher oft (normalerweise) selbst bestimmt. Wie läuft das in Matlab? Ich habe gelesen Matlab ist eine eigene Programmiersprache/eine höhere Programmiersprache. Steckt eine Sprache wie C dahinter?
Viele Grüße
Lisa
  1 Comment
Harald
Harald on 12 May 2024
Hallo Lisa,
in MATLAB ist es durchaus üblich, für numerische Daten (z.B. auch Schleifenvariablen) generell Double als Datentyp zu verwenden. Die größte Ausnahme ist für mich die Verwendung von uint8 für Bilddaten.
Du kannst den Speicherbedarf von Variablen im Workspace Browser sehen (ggf. Rechtsklick auf Name und Bytes auswählen) oder mit dem Befehl whos. Leere Variablen sind da aus meiner Sicht ein Spezialfall, weil es ja eben nichts zu speichern gibt, diese Information (Variablenname, Datentyp) ja aber dennoch abgelegt werden muss und somit Speicher kostet. Solche Effekte werden aber mit zunehmender Datengröße vernachlässigbar.
Ein paar Tipps in dem Zusammenhang:
Hinter MATLAB steckt C.
Viele Grüße,
Harald

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!