Mittels unique kann ich ja leider nur komplett doppelte Zeilen löschen.
Meine Funktion sieht derzeit so aus: Alle Zeilen werden nacheinander durchlaufen und darauf überprüft ob nachfolgende Zeilen gleiche x,y,z enthalten. Falls dies der Fall ist werden alle diese Zeilen zunächst in der ersten aufgetretenen Zeile addiert und mit NaN überschrieben. Mittels eines counters wird zum Schluss die erste Zeile durch die Anzahl an doppelten Zeilen dividiert.
Code:
for i=1:size(Messung,1)
counter=1;
for j=i+1:size(Messung,1) if sortiert(j,1:3)==Messung(i,1:3)
sortiert(i,4:size(Messung,2))=sortiert(i,4:size(Messung,2))+Messung(j,4:size(Messung,2));
Messung(j,:)=NaN;
counter=counter+1;
end end
Messung(i,4:size(Messung,2))=Messung(i,4:size(Messung,2))/counter;
end
Besten Dank nochmal Seban!
Habe gerade mal ein bißchen an meiner Schleife gefeilt und deinen Vorschlag eingefügt. Die jetzt noch benötigte Zeit ist nicht der Rede wert.
Vielleicht gibt es noch eine formal "schönere" Lösung, aber ich bin mit dem Ergebnis zufrieden
Meine Matrix ist nicht grundsätzlich 4 Spalten breit (gerne auch mal 10), sodass ich end als Positionsangabe nicht verwenden kann. Bei Verwendung von z.B. 4:10 statt end summiert mir sum für anz=1 natürlich alles auf und unterscheidet nicht zwischen den Spalten. Wenn ich, um dies zu umgehen, dafür eine zweite Schleife einbaue (siehe unten), die mir die Fälle von anz=1 rausfiltert, brauche ich tatsächlich länger als mit der Methode von Seban.
M2 = zeros(unpos(end), size(M,2));
for k=unpos
if anz(k)==1
x=M(pos==k,4:size(M,2));
else
x=sum(M(pos==k,4:size(M,2)))/anz(k);
end
M2(k,:) = [U(k,:) x];
end
Aber herzlichen Dank für den Vorschlag. So hab ich wieder was neues gelernt.
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.