Für jede Kombination von p und q wird die innerste Schleife 3 Mal ausgeführt und ich erhalte eigentlich 3 verschiedene Z Werte. Die würde ich gerne in einer Matrix Speichern. Z.B. so:
for i=1:4
Z(1:2,(i-1)*3+1:(i-1)*3+3)=repmat(x{i},1,3);
Z(3,(i-1)*3+1)=sum(Y(:,1))+prod(x{i});
Z(3,(i-1)*3+2)=sum(Y(:,2))+prod(x{i});
Z(3,(i-1)*3+3)=sum(Y(:,3))+prod(x{i});
end
Vielen Dank für Deine Antwort. Ich kann sehr gut verstehen, dass Du Dir diese Frage stellst.
Mein eigentliches Problem ist von dem Bespiel verschieden. Aber ich wollte als Repräsentanten ein kleines Beispiel angeben in der Hoffnung, dass ich die Lösung auf mein Problem anwenden kann.
Löblich, allerdings glaube ich, dass es fast immer besser ist, das Beispiel direkt anzugeben. Besonders parfor Loops sind sehr eigen in dem was sie zulassen.
Was bei deinem Beispiel nicht geht, ist eine Variable zu definieren, die du nach dem parfor loop verwendest aber in jedem einzelnen schreibst.
Du musst also für jede parfor schleife das i. element eines bereits vorhandenen Vektors benutzen.
parfor p=1:length(kaufsignal) for q=1:length(verkaufsignal) for u=1:length(massmooth)
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%Bootstrap-Sektion
for e=1:anzahl_bootstraps
x=verkaufsignal(1,p);y=verkaufsignal(1,q);z=massmooth(1,u);
Für jede kombination aus den vektoren kaufsignal, verkaufsignal und massmooth gibt es jeweils "anzahl_bootstraps"-viele mittelwerte. Dieser mittelwert soll immer gespeichert werden. So wie der code jetzt ist, läuft er super durch. Alles klappt. Nur die Speicherung klappt nicht.
Ich hatte an sowas gedacht:
Code:
ergebnisse=zeros([length(kaufsignal),length(verkaufsignal),length(massmooth),anzahl_bootstraps]); %NEU!!
matlabpool open parfor p=1:length(kaufsignal) for q=1:length(verkaufsignal) for u=1:length(massmooth)
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%Bootstrap-Sektion
for e=1:anzahl_bootstraps
x=verkaufsignal(1,p);y=verkaufsignal(1,q);z=massmooth(1,u);
Hm, da ich gerade unterwegs bin, kann ich es nicht überprüfen. Der Code sieht eigentlich gut aus. Wie gesagt, parfor ist einfach ein mieser Hund.
In deinem Beispiel fehlt aber der Index bei Z, vielleicht liegt da der Unterschied?
Was vielleicht klappen könnte, ist ergebnisse in jedem Loop als 3 dim Matrix zu speichern (nicht von p abhängig) und dann diese Matrix in einem p langen cell zu speichern. Damit hätest du in jedem einzelnen Parfor loop genau ein Element was du speicherst.
Hi, ich hab das gestern noch versucht. Jede innere Indizierung die nicht mit p anfängt, klappt nicht. Ich könnte machen ergebnis(p,e)=mittelwert. Dann werden natürlich jede Menge mittelwerte überschrieben und es kommt nicht raus, was ich will. Aber es läuft durch. ergebnisse(q,u,e)=mittelwert oder sogar ergebnisse(p,q,u,e)=mittelwert würde auch nicht gehen. Deswegen habe ich mich jetzt dazu entschieden, einfach zwei äußere Schleifen weg zu nehmen. Das ist zwar nur eine vereinfachte Version, aber sie ist Schnell und ich komme auch ungefähr auf die Werte, die ich brauche. Das andere wäre besser, aber ich bin etwas unter Zeitdruck (-:
Da ist doch eine Indizierung mit P drin. In einer parfor schleife ist es eigentlich kein Prolem sogenannte temporäre Variablen zu definieren.
gruß Pinky
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.