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

Suche nach ganzen Zeilen

 

umutos
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2010, 17:32     Titel: Suche nach ganzen Zeilen
  Antworten mit Zitat      
Hallo,
ich plage mich jetzt schon seit Tagen mit diesem kleinen Problem und wäre sehr Dankbar wenn mir jemand weiterhelfen könnte
Ich habe eine Matrix ‚x‘ und möchte möglichst effizient rausfinden wo jede Zeile sonst noch in der Matrix vorkommt. (z.B. Zeile 1 kommt in Zeile 1,3,4 und 6 vor; Zeile 2 kommt nur in Zeile 2 vor usw…). Mit der „Find Funktion“ würde das eigentlich gehen. Da aber nach einer ganzen Zeile (und nicht nach einem Wert)gesucht werden soll kann ich „find“ nicht anwenden. Ich kann auch nicht viele Schleifen verwenden da ich etwa 100 Matrizen mit jeweils mehr als 2 mio Zeilen habe.
Ein kleines Beispiel zur Verdeutlichung:
x=
1 2 423 6
2 3 4 2 5
1 2 423 6
3 4 5 6

Für i=1 müsste dann folgenden Vektor ausgegeben werden:
1
3
(Weil die erste Zeile in x in der ersten und in der dritten Zeile vorkommt)
Für i=2 müsste dann der Vektor folgenden Vektor ausgeben:
2
(weil die zweite Zeile nur in der zweiten Zeile vorkommt). usw…
Bin für jede Hilfe dankbar!
Bernd
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.05.2010, 18:26     Titel:
  Antworten mit Zitat      
Hallo

ist das nicht ähnliche Aufgabestellung:
http://www.gomatlab.de/location-von-unique-zeilen-t11918.html

Ohne Schleifen kann ich mir das aber nicht vorstellen.
Code:

A = [1 2 423 6; 2 3 4 5;1 2 423 6; 3 4 5 6];

num_rows = size(A,1);
rows     = cell(1,num_rows);
for k = 1: num_rows
   pos = false(1, num_rows);
   for m = 1:num_rows
      pos(m) = isequal(A(k,:),A(m,:));
   end
   rows{k} = find(pos);
end
 



2 Variante:

Code:

A = round(rand(1000,4)*10);

num_rows  = size(A,1);
rows      =  cell(1,num_rows);
comp_rows = 1:num_rows;
while ~isempty(comp_rows)
   pos = false(1, num_rows);
   k = comp_rows(1);
   for m = comp_rows
      pos(m) = isequal(A(k,:),A(m,:));
   end
   pos       = find(pos);
   rows(pos) = {pos};
   comp_rows = setxor(comp_rows, pos);
end
 


3 Variante


Code:

A = round(rand(1000,4)*10);

num_rows  = size(A,1);
rows      =  cell(1,num_rows);
comp_rows = 1:num_rows;

while ~isempty(comp_rows)
   k = comp_rows(1);
   pos       = find(all(bsxfun(@minus,A,A(k,:))==0,2));
   rows(pos) = {pos};
   comp_rows = setxor(comp_rows, pos);  
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
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.