WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Doppelte Einträge in Array entfernen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2014, 15:44     Titel: Doppelte Einträge in Array entfernen
  Antworten mit Zitat      
Hi,

ich habe eine n-n-Matrix aus der ich die Positionen der Zellen suche in jenen der Inhalt ungleich 0 ist. Die Diagonalemente z.B: Matrix(1,1) oder Matrix (12,12) sind stets besetzt aber irrelevant. Existiert eine Zahl in Matrix(1,4) so existiert dieselbe ebenso in Matrix(4,1).

Die Positionen bekomme ich folgendermaßen raus:
Code:
[pos(:,1), pos(:,2)]=find(Y_Basis~=0);


Die Positionen der Diagonalemente filtere ich wie folgt raus (da irrelevant):
Code:
pos(pos(:,1)==pos(:,2),:)=[];


Das Ergebnis sieht wie folgt aus:
[1,2; 2,3; 4,9; 2,1; 3,2; 9,4]

Problem ist, dass mein Ergebnis wie folgt aussehen sollte:
[1,2; 2,3; 4,9]

>> Die Kombination "1-2" ist gleich "2-1" - ich benötige nur eine davon.

Kann man meine Frage verstehen? Gibt es einen weg die "doppelten" bzw. unnötigen Zeilen der Matrix zu entfernen?


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2014, 20:48     Titel:
  Antworten mit Zitat      
Mit dieser Erweiterung des bereits oben aufgeführten Codes hat es geklappt:
Code:
for i=1:length(pos);    for j=i:length(pos)
if pos(i,:) == fliplr(pos(j,:));   pos(j,:)=pos(i,:);   end
end;                     end

pos=unique(pos,'rows');


Gibt es einen kürzeren / einfacheren / sauberen Weg?

Würde mich sehr darüber freuen. Smile

Ich habe die Matrix, um die es geht, angehangen.

Y_Basis.zip
 Beschreibung:

Download
 Dateiname:  Y_Basis.zip
 Dateigröße:  2.06 KB
 Heruntergeladen:  238 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.01.2014, 21:33     Titel:
  Antworten mit Zitat      
du könntest
Code:
benutzen um gleich nur die obere dreiecksmatrix zu untersuchen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2014, 21:53     Titel: Der Hammer
  Antworten mit Zitat      
Wow Danke! Mit:
Code:
[c1(:,1), c1(:,2)]=find(triu(Y_Basis)~=0);
c1(c1(:,1)==c1(:,2),:)=[];


Ist die Sache ja bereits gelöst und dazu auch noch ziemlich kompakt! Smile
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2014, 22:15     Titel:
  Antworten mit Zitat      
In der Tat eine coole Funktion. Mit triu(x,1) kann man die zweite Zeile des Codes weglassen.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.