WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Beschreiben von Structs in Cell-Arrays

 

punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 23.01.2017, 11:01     Titel: Beschreiben von Structs in Cell-Arrays
  Antworten mit Zitat      
Code:

%% Cell-Array
MyCell = cell(1,3);

struct1 = struct('Text', 'a', 'Number', 1);
struct2 = struct('Text', 'b', 'Number', 1);
struct3 = struct('Text', 'c', 'Number', 1);

MyCell{1} = struct1;
MyCell{2} = struct2;
MyCell{3} = struct3;

%% Table
NewNumbers = (1:3)';
tData = table(NewNumbers);

%% Daten übernehmen
for i=1:length(MyCell)
  MyCell{i}.Number = tData.NewNumbers(i);
end
 


Hallo,
jemand eine Idee, wie ich den Teil - Daten übernehmen - auch einfacher (bzw. ohne for-Schleife) lösen kann, z.B. mit einer Cellfun?

Schönen Gruß
Lars
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2017, 12:55     Titel: Re: Beschreiben von Structs in Cell-Arrays
  Antworten mit Zitat      
Hallo punkNgrind,

Dazu müssten wir noch wissen, was das Ziel des Ganzen ist. Wozu dient z.B. das Table-Objekt?

Code:
NewNumbers = 1:3;
for i = 1:length(MyCell)
  MyCell{i}.Number = NewNumbers(i);
end

Ich habe dzu mal geraten, dass das wohl der "Teil - Daten" ist.

cellfun ist nicht unbedingt schneller, einfacher oder übersichtlicher.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 23.01.2017, 13:26     Titel:
  Antworten mit Zitat      
Hallo Jan S,

Hintergrund:
Das Cell-Array wird durch das Einlesen eines XML-Files erstellt, daher eine feste Struktur als Cell-Array mit mehren Structs.
Die Table-Daten kommen aus einer Benutzereingabe, die ich ins Cell-Array übernehmen/ersetzen will.

Mir geht es primär um diesen Zugriff:
Code:

for i=1:length(MyCell)
  MyCell{i}.Number = tData.NewNumbers(i);
end
 

Der Rest ist nur "Fake"-Code, damit jemand das Ausprobieren kann.

Cellfun war ja nur ein Beispiel, schön wäre ja auch so ein Zugriffsmöglichkeit:
Code:

MyCell{:}.Number = tData.NewNumbers(:);
 

oder ähnliches, vorrausgesetzt das ist schneller oder übersichtlicher.
Aber bisher bin ich nicht weiter gekommen.

Schönen Gruß
Lars
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2017, 10:44     Titel:
  Antworten mit Zitat      
Hallo punkNgrind,

Wenn ein Cell-Array erstellt wird, ist es ein Umweg es in ein table Objekt umzuwandeln. Wenn Die Daten bereits als table vorliegen, erkläre das bitte eindeutig.

Macht die vonm mir bvereits gepostete Schleife, was du brauchst? Wenn nicht, was fehlt?
Ein Einzeiler wäre zwar schöner, aber ich sehe gerade keinen solchen Weg. Falls es eine Microsekunde schneller wäre, müsste es immer noch viele Millionen mal laufen, bevor Du die Zeit wieder reingeholt hast, die das Fragen im Forum kostet. Aber es ist natürlich immer eine gute Idee, sich nach effizientem Code umzuschauen, weil man dann ja auch etwas für andere Programmier-Probleme lernt.

Gru0ß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 24.01.2017, 14:40     Titel:
  Antworten mit Zitat      
Hallo Jan,

die Variante die ich am Anfang gepostet habe funktioniert ja (und unterscheidet sich im Grunde auch nicht von deiner Variante).
Ich wollte nur wissen, ob eine andere Art der Zugriffsmöglich prinzipiell möglich ist.
Wenn ich die dann kenne kann ich immer noch entscheiden, ob die besser oder schlechter ist, aber erst einmal muss ich die kennen.

Das da oben war ja nur ein Beispielcode, um mein Problem zu beschreiben und so dass jemand anderes mit C+P den Code für sich schnell selber ausprobieren kann.
Warum jetzt das Eine als Cell-Array und das Andere als Table vorliegt ist doch erst einmal irrelevant.

Zeit die beim Posten im Forum "vergeudet" wird, gegen Zeitersparnisse in der Performance von Code aufzuwiegen halte ich für Unsinn. Es geht mir ja darum zu lernen, um auch bei ähnlichen Problemstellung eventuell eine elegantere Lösung zu haben.

Schönen Gruß
Lars
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2017, 20:22     Titel:
  Antworten mit Zitat      
Hallo punkNgrind,

Wenn man nur den geposteten Code im Forum sieht, kann man nicht wissen, was dazu nur dem Erzeugen von Test-Daten dient, und was zum Lösungsversuch zählt.

Über die Nachteile eines vorzeitigen Optimierens findet man im Netz viel, Stichwort "premature optimization", z.B. https://en.wikipedia.org/wiki/Program_optimization. Im Berufsleben ist die Zeit relevant, die man zur Lösung eines Problems einsetzt, und dazu zählt natürlich auch die Zeit, die man für die Optimierung des Codes benötigt.

Ich denke, meine Antwort ist bereits klar geworden: Die Strukturierung der Daten mit einem table Objekt und einem Struct-Cell-Array hat zur Konsequenz, dass es keine "elegante" Methode für ein Kopieren gibt. Hier muss man sich entscheiden, ob die Eleganz der Daten-Repräsentation oder der -Konvertierung wichtiger ist.
Die Schleife macht jedenfalls effizient, was sie soll.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.