Verfasst am: 07.05.2010, 18:18
Titel: Location von unique Zeilen
Hallo,
Wie finde ich die location von Zeilen in einer Matrix, die nicht doppelt vorkommen, d.h. kein Duplikat haben? D.h. ein Vektor der mir sagt dass Zeilen 2,4,7 und 8 unique sind und nicht mehrmals vorkommen.
Danke für die Antwort aber ich glaube du hast da was missverstanden:
1. Ich suche nach Zeilen in einer Matrix und nicht in einem Vektor. Ich hab mir überlegt dass man vielleicht die Zeilen in der Matrix miteinander addieren kann, aber dann kommt es vor dass die Summe von 2 zeilen die gleiche ist obwohl die einzelnen Spalten unterschiedlich sind.
2. Wo sehe ich in b ob eine Zeile doppelt vorkommt? b sagt mir doch nur, an welcher Position zum letzten mal die entsprechende Zeile vorkommt D.h in deinem Beispiel sagt mir der Vektor b:
z.B. dass ein "2er" in der 6ten Zeile vorkommt, nicht aber ob der 2 er sonst noch vorkommt und wo sonst noch vorkommt. und ich will ja wissen wo die doppelten für jede einzelne Zeile sind.
Es wär mir auch schon geholfen wenn ich alle Zeilen die keinen doppelten haben (bei dir wäre es der 6 er in der 12 ten Zeile) löschen kann.
Danke für den Vorschlag. Der ist super, nur leider kann ich den Code nicht auf meinen Datensatz anwenden. Mein Datensatz hat mehr als 1 Mio Zeilen und ich kann daher x= false (a x a) nicht anwenden (1 mio x 1 mio ist zuviel für matlab). ich hab den Code den du geschrieben hast leicht umgeschrieben damit es dann auch funktioniert:
Code:
A =[3,4,2; 2,2,1; 2,2,1; 0,0,0; 1,0,2; 0,-1,2; 2,2,1]
num_rows = size(A,1);
B(:,1)=1:num_rows;
B(:,2)=false(num_rows,1);
for k=1: num_rows-1 for m= k+1:num_rows
ifisequal(A(k,:),A(m,:))==true
B(k,2)=true;
B(m,2)=true;
end end end
Dieser Code funktioniert zwar gut, aber nur wenn num_rows kleiner als 5000 ist. Danach hängt er sich auf. Kann ich das irgendwie umgehen?Den Datensatz in kleine Teile zerlegen würd das Problem auch nicht gleich lösen da ja z.B. die doppelten der ersten Zeile im letzten Abschnitt vorkommen könnten.
Ich habe auch den Versuch gestartet auf eine der beiden Schleife zu verzichten aber leider funktioniert der Befehl
nicht bzw. Es kommt immer false raus.
Wie schon in der vorherigen Nachricht geschrieben muss ich es nur schaffen die nicht doppelt vorkommenden Zeilen zu löschen. Dann würde sich mein Datensatz erheblich verkleinern und ich kann wieder richtig damit arbeiten. Sitze schon seit vielen Wochen vor diesem kleinen Problem und komme einfach nicht weiter. Bin schon am verzweifeln.
Danke nochmals für die Hilfe!
Kleiner Nachtrag:
ISEQUAL vergleicht nicht nur Elemente sondern auch Dimension von Arrays.
Wenn Dimensionen von Arrays unterschiedlich ist, kommt immer FALSE raus
Deswegen kriegst bei diesem Vergleich FALSE: weil Matrix ist m x n während Array m x 1 ist.
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.