Derzeit habe ich eine Parfor-Schleife Berechnungen auf einer Struktur in MATLAB. Während mein Code ein bisschen zu lang zu schreiben, kann es mit dem folgende Beispiel emuliert werden:Speichern von Struct Variable in Parfor Schleifen berechnet - MATLAB
a.test = [1 2 3];
result = [];
parfor i = 1:3
c = a;
c.test(2) = round(rand());
if c.test(2) == 1
%# Store c in result
end
end
disp(result.test) %# Should show [1 1 3]
a (und folglich c) ist eine sehr große Struktur, so dass jede Iteration zu speichern, ist für mich nicht möglich (wegen Speicherbeschränkungen).
Idealerweise möchte ich c direkt in eine Variable speichern können, die ich vor der Parfor-Schleife initialisiere. Wenn ich MATLABs Example: Using a Custom Reduction Function betrachte, kann ich sehen, dass es möglich ist, eine gegebene Iterationsvariable zu speichern (ohne jede einzelne Iteration speichern zu müssen), aber ich verstehe ihre Methode nicht vollständig. Ich bin verblüfft darüber, wie ihre Funktion (anscheinend) zwei separate Ausgangsvariablen erzeugt, während die Funktion nur eine Ausgangsvariable definiert.
Ich bin mir sicher, dass dies ein sehr häufiges Problem ist, aber bis jetzt hat keine meiner Suchen irgendwelche gültigen Ergebnisse ergeben.
Jede Hilfe würde sehr geschätzt werden.
Ich bin ein wenig verwirrt von dem, was Sie meinen hier: Sie wollen parallel Iterationen tun und nehmen nur das erste Ergebnis, dass einige Test bestanden wird (vermutlich die anderen Aufgaben Cancelling)? Wenn Sie über die 'cummax'-Funktion in ihrem Array sprechen, wird nur ein Ausgang (der zufällig ein 2-Element-Array ist) ausgeführt. – Dougal
Bezüglich der 'cummax' Funktion sehe ich es jetzt. Zuerst ignorierte ich die A (1) und B (1) als Formalitäten, aber ich sehe, was es gerade macht. Du schreibst, obwohl es nicht auf mich zutrifft. Das Abbrechen der anderen Aufgaben ist nicht wichtig, das Ergebnis ist wichtiger. Jonas unten zeigt eine einfache Möglichkeit, dies zu tun. – rbhalla