Verfasst am: 07.03.2011, 15:06
Titel: keine doppelten Werte
Hallo
Ich habe einen Vekor x in dem Werte einfach oder mehrfach vorkommen. Jetzt möchte ich einen neuen Vektor y erstellen in dem alle Werte vorkommen die im Vektor x vorhanden sind. Wenn der Wert in Vektor x doppelt oder maerfach vorkommt, dann darf dieser Wert nur einmal in Vektor y vorkommen.
Der Befehl "unique" hat mir schon mal sehr geholfen! Nun weiß ich, dass in meinem Vektor einige Werte doppelt/mehrfach auftauchen.
Ich habe aber noch eine weitere Frage:
Wie kann ich denn nun die Zelleinträge finden, die doppelt/mehrfach vorkommen?
Über [Nummer]=find(...) komme ich nicht weiter, da ich ja keine genaue Angabe machen kann, was er suchen soll. Ich benötige aber irgendwie die Indizes meines Ursprungsvektors in denen Werte stehen, die insgesamt öfter vorkommen.
Beispiel, damit es klarer wird :
Vektor=[1 2 3 1 4 5 6 6 7 8 6]
D.h. ich möchte nun, dass Matlab mir z.B. einen Vektor "Mehrfach" ausgibt mit:
Mehrfach=[1 4 7 8 11], da an der Stelle 1, 4, 7, 8 und 11 in "Vektor" Werte stehen, die mehrfach in "Vektor" vorkommen.
Moin, ich habe ein ähnliches Problem, leider nur etwas komplexer und ich komm nicht auf eine gescheite Lösung
Ich habe 2 Spaltenvektoren, X1,X2,X3,.... und Y1,Y2,Y3,...
Innerhalb jedes Spaltenvektors kann es häufig auftreten, dass sich Werte wiederholen, was nicht schlimm ist.
Ich würde gerne die Werte finden, die in Kombination X und Y mehrfach auftreten.
Beispiel:
A=[1 1 2 2 3 3 4 4 5 5 1]
B=[9 8 7 5 5 4 3 2 1 0 9]
Die A-B Kombination A=1 und B=9 ist zweimal vorhanden, ganz vorn und ganz hinten im Vektor.
Wie erhalte ich hier den Index!?
% Findet die gleichen X&Y Einträge [b, m, n] = unique(dexel(:,1:2), 'rows','first');
indexfirst=sort(m); %Index "zurücksortieren", da unique immer sortiert...
indexsecond=setdiff(1:length(dexel),indexfirst); %Gegenteil von indexfirst
indexsecond=indexsecond'; clear b; clear m; clear n;
% indexfirst und indexsecond sind die Indezes, die gleiche X und Y Werte % getrennt haben in dexel_A und dexel_B, Z-Werte sind aber noch gemischt:
dexel_A=dexel(indexfirst,:);
dexel_B=dexel(indexsecond,:);
% Z-Wert wird vergleichen um obere und untere Spanschale zu bestimmen: iflength(dexel_o)==length(dexel_u) for i=1:1:length(dexel_o) if dexel_A(i,3) > dexel_B(i,3)
dexel_o(i,:) = dexel_A(i,:);
dexel_u(i,:) = dexel_B(i,:);
elseif dexel_A(i,3) < dexel_B(i,3)
dexel_o(i,:) = dexel_B(i,:);
dexel_u(i,:) = dexel_A(i,:);
else disp('3. Spalte: Dexel hat gleiche Länge!?') return end end else disp('Fehler, falscher Input, da unterschiedliche Anzahl von oberen und unteren Dexel') return end
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.