Guten Tag,
ich sitze nun schon seit längerem an folgendem Problem und finde keine Lösung.
Ich generiere mit einem Skript viele Structs mit Namen
EreignisR1T151 (zulesen ist dies nicht wie T151, sondern wie T15 1)
EreignisR1T152 (zulesen ist dies nicht wie T151, sondern wie T15 2)
EreignisR1T153 (zulesen ist dies nicht wie T151, sondern wie T15 3)
.
.
.
erstellt wurden diese Structs mit folgendem Kommando
wobei dem Dateiname jeweils das Struct E zugeteilt wird. Dies funktioniert wunderbar. Nur möchte ich das Ganze speichern, aber wenn ich das tu habe ich mehrere hundert Dateien. Nun möchte ich das ganze wieder in ein struct zusammen Packen und schaffe es nicht. Von Hand würde folgendes gehen:
Ich generiere mit einem Skript viele Structs mit Namen
EreignisR1T151 (zulesen ist dies nicht wie T151, sondern wie T15 1)
EreignisR1T152 (zulesen ist dies nicht wie T151, sondern wie T15 2)
EreignisR1T153 (zulesen ist dies nicht wie T151, sondern wie T15 3)
...
Hier liegt bereits das Problem. Du erzeugst komplizierte Variablen-Namen indem Du den Index in den Namen einfügst. Danach ist es wenig verwunderlich, dass es schwierig wird, auf diese Variablen-Namen wieder zuzugreifen.
Wenn Du die Daten strukturiert speichern würdest, würden erst gar keine Schwierigkeiten auftauchen, z.B. als Array, Cell Array oder Struct Array:
Welcher Typ von Array nun für Dich am besten geeignet ist, hängt von den eigentlichen Daten ab.
Dass Du die Variablen per "assignin('base', ...)", auch Poofing genannt, in den Baseworkspace schreibst, ist ein anderes Problem. Das macht ein Programm schwer durchschaubar und zudem langsam - debuggen möchte man soetwas später kaum. Eine geordnete Übergabe von Inputs und Outputs wäre da übersichtlicher und sicherer zugleich.
Gruß, Jan
Jawag
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.01.2011, 22:57
Titel:
Hmm da war ich froh dass ich den Trick mit dem assignin gefunden habe und nun ist es wieder nichts. schade.
Ok dann mal von Anfang an, denn dieses Problem begleitet mich in anderer Form schon deslängeren.
Ich habe eine belibige for-Schleife und bei jedem durchgang möchte ich einige Variablen speichern. Das Ganze hat dann die Form:
Code:
for i=1:100
berechne a(i),b(i),c(i).....
save a(i),b(i),c(i).....
end;
wobei die a(i),b(i),c(i)... selber wieder arrays oder structs sind. Das Problem ist nun dass ich das Ganze letztendlich in einer einzigen Datei/struct... hätte, die, wenn ich sie aufmache ich wieder alles nachschauen kann.
Mein letzter Versuch (vor dem geposteten) ging etwa so:
Code:
for i=1:1:77 %Messungen durchlaufen
Ergebnisname=sprintf('ErgebnisT%u%u.mat',o,i); %Name erzeugen
E = struct('Current',(T),'Density',(j),'Steigung',(alpha),'Maxoutput',(P),'Fit1',(fit1),'Fit2',(fit2),'Strom',(x),'Power',(y),'Error1',(error1),'Error2',(error2),'Maxjth',(Tfehler),'Fehler',(Fehler),'Fehlerdichte',(Fehlerdichte)) %struct bauen mit allen zu speichernden Variablen
save(Ergebnisname, 'E') %speichern
end;
nun hab ich aber 77 gespeicherte structs und ich weiss einfach nicht wie ich das ganze elegant löse und am ende eine Datei habe
Hast du vielleicht noch eine Idee?
Jetzt sind alle 77 Structs in einem MAT File gelandet. Spricht etwas dagegen? Das hätte den Vorteil, dass man später recht einfach z.B. auf alle "Steigung"-Variablen zugreifen könnte:
Das wäre dann ein Vektor mit allen Steigungen (falls E(i).Steigung ein Skalar ist).
Etwas effizienter wäre es mit "i = 77:-1:1", da dann das Struct E gleicht richtig dimensioniert wäre. Aber bei 77 Iterationen ist das noch nicht so wichtig.
Gruß, Jan
Jawag
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.01.2011, 10:28
Titel:
Das funktioniert einwandfrei! ich wusste es muss nen einfachen Weg geben. Sehr schön, danke!
Gibt es zufällig noch einen weg wie ich die 77 Zellen in dem E(i) struct benenne? Also wieder nicht manuel. Halt R1T151,R1T152...
Dann hast Du individuelle Namen für alle Structs, und trotzdem alles schön ordentlich beieinander. Wenn Du das Programm dann mal auf 78 oder 78921 Daten erweitern möchtest, geht das ohne lange im Code herum stochern zu müssen.
Gruß, Jan
Jawag
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.01.2011, 14:50
Titel:
Das ist eigentlich genau was ich gesucht habe, aber es funktioniert nicht.
??? Subscripted assignment between dissimilar structures.
Error in ==> T0>plotbutton_Callback at 151
E(i) =
struct('Thresholdcurrent',(I),'Thresholdcurrentdensity',(j),'Slope',(alpha),'Maxoutput',(P),'Fit1',(fit1),'Fit2',(fit2),'Current',(x),'Outputpower',(y),'Error_fit1',(error1),'Error_fit2',(erro
Error in ==> gui_mainfcn at 96 feval(varargin{:});
Error in ==> T0 at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)T0('plotbutton_Callback',hObject,eventdata,guidata(hObject))
Wozu setzt Du die Daten übrigens in Klammern? Das ist kein Fehler, bringtaber auch nichts, oder?
Gruß, Jan
Einstellungen und Berechtigungen
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
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.