- If value is an empty cell array {}, then s is an empty (0-by-0) structure.
Warum wird "0x0 empty struct array with fields:" ausgegeben?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
0 Kommentare
Antworten (2)
Harald
am 3 Mai 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:
Viele Grüße,
Harald
2 Kommentare
Harald
am 6 Mai 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
Elisabeth
am 10 Mai 2024
1 Kommentar
Harald
am 12 Mai 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
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!