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

mehrere Outputs in cell array speichern?

 

p.nietnagel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 20:23     Titel: mehrere Outputs in cell array speichern?
  Antworten mit Zitat      
Hallo,

ich möchte in einer for- Schleife über viele Datensätze den Output in einem cell array speichern.

Also sowas wie:
Code:

for i = 1:length(Liste)
    Eintrag1 = floor((i-1)/5)+1;
    if Eintrag1 > 40
        Eintrag1 = Eintrag1 - 40;
    end
    Eintrag2 = rem(i-1,5)+1;
    Eintrag3 = floor((i-1)/200)+1;
[out1, out2, out3, out4, out5] = spectopo(data, frames, srate);
Array{Eintrag1, Eintrag2, Eintrag3} = [out1, out2, out3, out4, out5];
end
 


Aber das funktioniert so nicht. Ich hab es versucht, in dem ich den OUTPUT mit den Einzeloutputs als Cell Array gespeichert hab und wollte diesen dann in den Array quasi als UnterArray einfügen, aber das geht auch nicht.
Hat jemand einen heißen Tipp?


Vielen Dank im Voraus!


Schöne Grüße,
p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 24.09.2010, 23:35     Titel:
  Antworten mit Zitat      
Hallo,

zunaechst ist es natürlich immer schwieriger eine Lösung zu finden wenn man die Dimensionen der Matrizen nicht kennt. Aber rein prinzipiell ist ein solcher Ausdruck:
Code:

Array{Eintrag1, Eintrag2, Eintrag3} = [out1, out2, out3, out4, out5];
 

nicht möglich.

Es ist in diesem Fall wirklich entscheident wie du den Cell Array füllen möchtest, d.h. ob alle Werte von "out" in eine Zelle oder in mehrer Zellen gespeichert werden sollen.

Folgende Beispiele wären valide (sehr trivial):

Code:

Array{1} = out1;
Array{1} = [out1 out2 out3];
 


Möchtest du mehrer Zellen mit unterschiedlichen Werten füllen musst du eine for Schleife verwenden, z.B.:

Code:

for k = 1:5
     Array{k} = ['out' num2str(k)];
end
 


Nun hasst du 5 Zellen mit den Werten von out1 bis out5.

Da es mir scheint (dies ist nur eine wage Annahme), dass du gern out1 bis out5 in einer Zelle an bestimmten Indexen (Positionen) speichen möchtest, würde ich an deiner Stelle erst out1 bis out5 in einer Matrix zusammenfassen (in der gewünschten Ordnung) und dann wie im ersten Beispiel in einem Cell Array speichern.

Falls es dir gar nicht weiterhilft, dann stell mal ein lauffähiges Minimalbeispiel rein, denke dann lässt sich ne Lösung für deinen konkreten Fall finden.

MFG

Sco
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: 26.09.2010, 21:40     Titel: Re: mehrere Outputs in cell array speichern?
  Antworten mit Zitat      
Hallo p.nietnagel,

Zitat:
Aber das funktioniert so nicht.

Bitte erkläre doch mal, was da wie nicht funktioniert. Gibt es eine Fehlermelgung? Welche? Unterscheiden sich die Ergebnisse von Deinen Erwartungen?

Das läuft durchaus:
Code:
clear('A');
A{2,3,4} = [4, 17, 38, 900];
 


Wir bräuchten also wohl noch mehr Details.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 26.09.2010, 22:04     Titel:
  Antworten mit Zitat      
Hallo Jan,

natürlich funktioniert dies:
Zitat:

Code:

A{2,3,4} = [4, 17, 38, 900];
 


und somit stimmt meine Aussage nicht 100%ig. Allerdings denke ich nicht das Pietnagel etwas in dieser Art wollte. Ich ging davon aus, dass er mehrere Einträge in eine Zelle (2 dimensional) füllen wollte, da es mir schien, dass die Variablen "Einträge" Indexe enthalten:

Z.B. so in der Art:

A{1:10} = out1;
A{11:20} = out2;
A{21:30} = out3;

und dies eben in einer Kommandozeile zusammenfassen wollte:
Code:

A{1:10,11:20,21:30} = [out1 out2 out3];
 

Und so ein Ausruck ist nicht möglich.

Falls ich mich Irre, dann korregier mich bitte Smile.

MFG

Sco
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: 26.09.2010, 22:57     Titel:
  Antworten mit Zitat      
Hallo Sco,

Du hast natürlich vollkommen recht. Ich ahne auch, dass P. Nietnagel etwas anderes meint. Aber Ahnungen sind hier nicht so viel Wert wie die eindeutige Schilderung des Problems vom Fragenden. Dann kann ich mich darauf beschränken nach einer Antwort zu suchen, und muss mir nicht noch die passende Frage dazu ausdenken ;-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2010, 14:15     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Sco,

Du hast natürlich vollkommen recht. Ich ahne auch, dass P. Nietnagel etwas anderes meint. Aber Ahnungen sind hier nicht so viel Wert wie die eindeutige Schilderung des Problems vom Fragenden. Dann kann ich mich darauf beschränken nach einer Antwort zu suchen, und muss mir nicht noch die passende Frage dazu ausdenken Wink

Gruß, Jan


Ähm, sorry, Ich war unverhofft 2 Tage offline... Soll vorkommen. Wink
Um dem Rätselraten ein Ende zu bereiten:
Ich weiß nicht, ob ich wirklich ein lauffähiges Minimalbeispiel dafür simulieren kann, deswegen versuche ich es mit einer wortreichen Erklärung.

Ich habe viele große Datensätze, deren Namen ich in einer bestimmten Reihenfolge in eine Liste gepackt habe und die ich nun nacheinander reinlade und bearbeite.
Bearbeiten heißt: Berechnungen anstellen (ein Powerspektrum berechnen) und der Output besteht aus mehreren Teiloutputs, die unterschiedlich groß sind.
Code:
[out1, out2, out3, out4, out5] = spectopo(data, frames, srate);

Diese Outputs brauche ich zum Weiterarbeiten und möchte sie mir in ein großes Cell Array speichern.

Ich hatte es versucht mit:
Code:
[out1, out2, out3, out4, out5] = spectopo(data, frames, srate);
% Zwischenschritt, um die Teiloutputs in ein Cell Array zu pressen
Power = [out1, out2, out3, out4, out5];
% Und das hier als Endspeicher Array
Array{Eintrag1, Eintrag2, Eintrag3} = Power;
 

Dieses Array hier:
Code:
Array{Eintrag1, Eintrag2, Eintrag3}
bezieht sich auf das Speichern meiner Outputs aus der Berechnung für jeden einzelnen Datensatz, den ich in der for Schleife einlese und bearbeite.

Ähm, ist das jetzt so verständlicher geworden? Wenn nicht, versuche ich mal ein Beispiel zu erstellen.

Vielen Dank!

Schöne Grüße,
p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 27.09.2010, 14:29     Titel:
  Antworten mit Zitat      
Hallo Pietnagel,

jetzt hasst du dir zwar Muehe gegeben es zu verdeutlichen, aber trotzdem die wesentlichen Aspekte vergessen --> siehe Jans Post
Zitat:

Bitte erkläre doch mal, was da wie nicht funktioniert. Gibt es eine Fehlermelgung? Welche? Unterscheiden sich die Ergebnisse von Deinen Erwartungen?

Und genau das sind die wesentlichen Dinge um dir helfen zu koennen!!!

Prizipiell funktioniert diese Zeile:
Code:

Power = [out1, out2, out3, out4, out5];
 

nur wenn alle outs genau die selben Dimensionen haben, ist das so?

Was moechtets du mit folgender Zeile machen,
Code:

Array{Eintrag1, Eintrag2, Eintrag3} = Power;
 

was stellen die Vektoren "Eintrag" da, welche Dimensionen haben Sie. Sind sie nicht skalar dann funktioniert das auch nicht!

Du siehst hier sind noch viele Fragen offen. Versuch mal ein LAUFFAEHIGES Minimalbeispiel zu basteln, denke dann koennen wir zuegig helfen oder beantworte die Fragen und gib die von Jan genannten Aspekte an.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2010, 19:10     Titel:
  Antworten mit Zitat      
Hallo Embarassed

Sco hat Folgendes geschrieben:


jetzt hasst du dir zwar Muehe gegeben es zu verdeutlichen, aber trotzdem die wesentlichen Aspekte vergessen --> siehe Jans Post
Zitat:

Bitte erkläre doch mal, was da wie nicht funktioniert. Gibt es eine Fehlermelgung? Welche? Unterscheiden sich die Ergebnisse von Deinen Erwartungen?

Und genau das sind die wesentlichen Dinge um dir helfen zu koennen!!!

Prizipiell funktioniert diese Zeile:
Code:

Power = [out1, out2, out3, out4, out5];
 

nur wenn alle outs genau die selben Dimensionen haben, ist das so?



Nein. Genau das ist der Haken. Sorry, wenn ich das nicht richtig deutlich gemacht hatte.

Hier mal mein Versuch eines Minimalbeispieles.
Code:

Liste = [1:400]';
Array = cell(40,5,2);

for i = 1:length(Liste)
   
    %%% das Array, das zum Schluss gespeichert werden soll, soll die Datensätze
    %%% nach bestimmten Kriterien sortiert enthalten. Das Sortieren wird hier berechnet.
    %%% Am Schluss soll das Array die Dimensionen (40,5,2) haben (=400
    %%% Datensätze). Jeder einzelne Datensatz entspricht EINEM "Eintrag".
   
    Eintrag1 = floor((i-1)/5)+1;
    if Eintrag1 > 40
        Eintrag1 = Eintrag1 - 40;
    end
    Eintrag2 = rem(i-1,5)+1;
    Eintrag3 = floor((i-1)/200)+1;
    %[out1, out2, out3, out4, out5] = spectopo(data, frames, srate);

    %%%ok, spectopo kann ich jetzt im Minimalbeispiel nicht simulieren. Mal
    %%%angenommen, die outputs sehen so aus:
    out1 = rand(256,14);
    out2 = [3 4];
    out3 = rand(256);
    out4 = rand(256,14);
    out5 = [50];
    Array{Eintrag1, Eintrag2, Eintrag3} = [out1, out2, out3, out4, out5];
end
 


Natürlich erhalte ich hier die Fehlermeldung:
Code:

??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
 


Und meine Frage ist: wie kriege ich diese unterschiedlich großen outputs dennoch in einem Cell Array unter?
Zitat:

Was moechtets du mit folgender Zeile machen,
Code:

Array{Eintrag1, Eintrag2, Eintrag3} = Power;
 


Wie gesagt, mein "workaround" Versuch wär gewesen:

Code:

Power = [out1, out2, out3, out4, out5];
Array{Eintrag1, Eintrag2, Eintrag3} = Power;
 


Aber da bekomme ich wieder die Fehlermeldung:
Code:

??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
 



Ähm, ich hoffe, ich konnte jetzt deutlich machen, worauf ich hinaus will und hab auch die Fehlermeldungen udn Zusammenhänge besser darstellen können. Embarassed

Vielen Dank für Eure Mühe!

Viele Grüße,
p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 27.09.2010, 20:23     Titel:
  Antworten mit Zitat      
Hallo,

na das sieht doch schonmal viel besser und verstaendlicher aus Smile. Und wie versprochen wird dir dann auch schnell geholfen... Ich hoffe nur das ist nun wirklich was du wolltest. also mein Vorschlag:

Ersetze diese Zeile:
Code:

Array{Eintrag1, Eintrag2, Eintrag3} = [out1, out2, out3, out4, out5];
 

durch Diese:
Code:

Array(Eintrag1,Eintrag2,Eintrag3) = {[{out1}, {out2}, {out3}, {out4}, {out5}]};
 



MFG

Sco
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: 27.09.2010, 20:49     Titel:
  Antworten mit Zitat      
Hallo P. Nietnagel,

Oder durch:
Code:

Array{Eintrag1, Eintrag2, Eintrag3} = {out1, out2, out3, out4, out5};
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2010, 09:05     Titel:
  Antworten mit Zitat      
Hallo Jan, hallo Sco,

vielen Dank! Beide Lösungen funzen.
Und sehen eigentlich gar nicht kompliziert aus. Surprised Da hätte ich eigentlich auch selbst drauf kommen könne. Aber manchmal sieht man den Wald vor lauter Bäumen nicht.

Vielen Dank nochmals!!!

Einen schönen Tag und viele grüße,
p.nietnagel
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 - 2025 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.