Verfasst am: 27.06.2022, 09:45
Titel: Doppelte Elemente aus Matrix löschen
Hallo zusammen,
ich hab mehrere Messreihen mit Zeitstempel. Es kann vorkommen, dass die Zeitstempel doppelt oder dreifach verwendet werden, dann möchte ich immer nur die letzte aktuelle Messreihe speichern.
Ich hab ein Minimalbeispiel angehängt. Die Matrix ist aufgebaut als X = Wert, y = Messreihe, i=Anzahl an Messreihen
Ich dachte an etwas der Art:
Code:
for i = 1:length(Data)-1 if Data(1,2,i+1) == Data(1,2,i)
Data(:,:,i) = [];
else end end
ich habe Schwierigkeiten, deine Lösung zu durchblicken und den Zusammenhang zur ursprünglichen Frage herzustellen. Mein Vorschlag für die ursprüngliche Frage wäre:
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Reto4353
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.06.2022, 13:08
Titel:
Hallo Harald,
danke für Deine Lösung. Ich versuch mal die gepostete Lösung besser zu kommentieren:
Code:
time = round((0.2:0.2:151)',2); % sind die Zeitstempel, die ich am Ende behalten möchte
% der Teil hier erstellt die Ursprungsdatei. Für das Minimalbeispiel hatte ich nur die ersten sechs Einträge genommen for i = 1:1025
timestep(i,1) = round(ll(2+(i-1)*561,7)-50,2);
timerow(1:558,1) = timestep(i,1);
Data(:,:,i) = [ll(4+(i-1)*561:i*561, 2) timerow];
end
for i = 1:length(time)
index = find(timestep == time(i,1),1,'last'); %hiermit gleiche ich die Zeitstempel der Ursprungsdatei mit den Zeitstempel, die ich haben möchte ab und schreib den Index, wo der jeweils letzte gewünschte Eintrag in der Ursprungsdatei auftaucht heraus
indextime(i,:) = [time(i,1) index]; % hier schreibe ich den gewünschten Zeitstempel und den dazugehörigen Index der Ursprungsdatei, wo er letzmalig auftaucht in eine Matrix end
for i = 1:length(time)
TrueData(:,i) = Data(:,1,indextime(i,2)); %nun kopiere ich alle Einträge der Ursprungsdatei, wo der gewünschte Zeitstempel als letztes auftaucht.
end
ich behaupte, mein Ansatz wäre einfacher. ;) Man müsste lediglich runden - ich sehe beispielsweise, dass eine 0.2 minimal unterschiedlich zu den anderen ist.
Funktioniert mein Ansatz denn? Wenn nicht, welche Probleme gibt es damit konkret?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Reto4353
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 28.06.2022, 09:55
Titel:
Hallo Harald,
für das ursprüngliche Problem funktioniert Dein Ansatz sehr gut und ist tatsächlich deutlich einfacher. Nur ist mir mittlerweile aufgefallen, dass die Zeitstempel nicht immer chronologisch sind, wie in der Testdatei. Dort war ja: 0,2 0,2 0,4 0,6 0,6
aber es kann auch 0,2 0,4 0,6 0,2 0,4 sein. Das sollte sich aber über eine vorherige Sortierung lösen lassen.
Merci Dir vielmals und viele Grüße
Ret0
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.