ich heiße Philip, bin TUM Student und programmiere gerade einen Code + GUI in App Designer, der mir aus logfiles von Flugzeugsensoren Sinkpolaren ermittelt.
Das nur als grobe Info zu meinem Projekt.
Das Problem ist jetzt eig. nur dass ich eine for-Schleife, die den Code sehr verlangsamt, gerne ersetzen würde. Evtl. mit einer passenden Funktion wie z.B. mean oder sum, da es hierbei darum, mithilfe einer Summe von Werten Mittelwerte zu bilden, die vorher aber erst in einer Tabelle gesucht werden müssen.
Die Schleife um die es hier geht ist dazu da, Intervalle der Messdaten zu bilden für bestimmte gerundete ASpd's
Die Schleife muss alle Zeilen des riesigen bereits reduzierten Tables "T_redu" durchgehen und darin nach gleichen Werten von ASpd_round suchen,
In jeder Zeile dieses Tables steht auch jeweils ein Wert VSpd in einer anderen Spalte
Für jeden ASpd_round-Wert, den es im neuen Table dann nur genau EINMAL geben soll, sollen alle gefundenen VSpd-Werte im Neuen Table jeweils zu einem ASpd_round-Wert zu der Variable VSpd_SUM addiert werden, damit daraus später die Mittelwerte berechnet werden können.
Das Ganze habe ich ich bis jetzt wie folgt gelöst:
Code:
...
% Erst müssen Maximal- und Minimalwerte gefunden werden, um daraus die Größe des neuen Tables zu bestimmen.
ASpd_MIN = min(T_redu.ASpd_round);
ASpd_MAX = max(T_redu.ASpd_round);
% acc ist übrigens die Intervalllänge, womit vorab aus den ASpd_Werten die ASpd_round-Wert gebildet wurden. % QTTY = Quantity/ Anzahl aller verschiedenen ASpd-Werte
ASpd_QTTY = int32((ASpd_MAX - ASpd_MIN_V)/acc + 1);
% Table erstellen mit wenigen Variablen, die schon mal mit 0'en besetzt werden.
T_V = array2table(zeros(ASpd_QTTY_V,4),'VariableNames',... {'ASpd_round','ASpd_QTTY','VSpd_SUM','VSpd_MEAN'});
T_V.ASpd_round = (ASpd_MIN:acc_V:ASpd_MAX)';
% Schleife, um die es hier geht: % Schleife zum Auffinden(find) & Zusammenzählen(SUM=Summe) aller Sinkraten (VSpd = vertical speed) % und der auftretenden Anzahl(QTTY=quantity) zu jeder Fluggeschwindigkeit (ASpd = air speed) for ii = 1:height(T_redu) % row_ASpd ist nur ein Hilfsvektor zur Logikindizierung
row_ASpd = find(T_redu.ASpd_round(ii) == (T_V.ASpd_round));
% jeweils Wert von VSpd_smooth aus der Tabelle T_redu in die neue Tabelle T_V % in jeweilige Zeile zur Variablen VSpd_SUM bzw. E_SUM addieren und
T_V.VSpd_SUM(row_ASpd) = T_V.VSpd_SUM(row_ASpd) + T_redu.VSpd_smooth(ii);
% Wert von ASpd_QTTY dieser Zeile um 1 erhöhen
T_V.ASpd_QTTY(row_ASpd) = T_V.ASpd_QTTY(row_ASpd) + 1;
% sodass im nächsten Schritt Mittelwert VSpd_MEAN bzw. E_MEAN berechnet werden kann. end% Ende der Schleife
% Berechnen der Durchschnittlichen Sinkgeschwindigkeiten % für jede wahre Fluggeschwindigkeit gibt es genau einen Durchschnittswert:
T_V.VSpd_MEAN = T_V.VSpd_SUM ./ T_V.ASpd_QTTY;
...
Fließen letztlich alle Werte in die Mittelung ein?
Falls ja, lässt sich das mit findgroups / splitapply umsetzen.
Grüße,Harald
Hallo Harald, vielen Dank für Deine schnelle und vor allem hilfreiche Antwort.
Ja, alle Werte fließen in die Mittelung ein.
Und das beste: Es klappt einfach hervorragend.
Danke für deine super Hilfe.
Wie du mit einem Einzeiler einfach mal das Ganze Problem lösen konntest.
Genial^^ Also danke nochmal und schönen Abend noch.
Phil
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.