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

Cell Array aus Tupel sortieren?

 

eey
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2013, 15:41     Titel: Cell Array aus Tupel sortieren?
  Antworten mit Zitat      
Hallo zusammen,

ich stehe momentan vor einem Problem bei dem ich nicht genau weiß wie ich es am effizientesten lösen kann. Und zwar habe ich ein Cell-Array aus Werte Paaren, welche ich gerne sortieren bzw. zusammenfassen möchte.

Das Cell Array sieht etwa so aus:

Code:

[1, 2] % CellArray{1}
[2, 3] % CellArray{2}
[8, 4] % CellArray{3}
[5, 1] % CellArray{4}
[3, 9] % CellArray{5}
[4, 7] % CellArray{6}
[6, 10] % CellArray{7}
% etc.
 


Jetzt würde ich gerne "gleiche" Einträge in ein jeweilig eigenes Cell Array kopieren. Zwei Einträge gelten per Definition dann als gleich wenn mindestens ein Wert in beiden doppelt vorkommt.

Also zum Beispiel

Code:

[1, 2] == [2, 3] % Ist Gleich, da in beiden eine 2 vorkommt
[1, 2] == [8, 4] % Ist Ungleich, da beide Tupel nur unterschiedliche Werte haben
[2, 3] == [3, 9] % Ist Gleich, da in beiden eine 3 vorkommt
 


Zwei Einträge auf Gleichheit zu überprüfen ist relativ trivial und auch nicht das Problem; mein Problem ist jetzt dass ich alle gleichen Einträge clustern will. Mein oben gepostetes Beispiel soll am Ende dann so aussehen:


Code:

[1, 2] [8, 4] [6, 10]
[2, 3] [4, 7] []
[3, 9]  []      []
[5, 1]  []      []
% etc.
 


Hat jemand eine Idee wie man sowas effizient implementieren kann?

Schöne Grüße,
eey
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.09.2013, 17:38     Titel: Re: Cell Array aus Tupel sortieren?
  Antworten mit Zitat      
Hallo eey,

Wieso landen denn [2,3] und [3,9] nicht im selben Cluster? Die Aufgabe scheint noch nicht eindeutig definiert zu sein.

Eine Lösung wäre es, das Cell-Array zunächst mal in eine praktischere Matrix umzuwandeln:
Code:
M = cat(1, CellArray{:});

Dann kannst Du per SORT jede Zeile sortieren:
Code:

Jetzt kannst Du per HISTC die gleichen Zahlen in der ersten Spalte suchen:
Code:
P = unique(M(:, 1));
[count, Bin] = histc(M(:,1), P));

Wie es dann genau weiter geht, hängt davon ab, wie die Cluster genau definiert sind.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2013, 18:50     Titel: Re: Cell Array aus Tupel sortieren?
  Antworten mit Zitat      
Hallo,

Jan S hat Folgendes geschrieben:

Wieso landen denn [2,3] und [3,9] nicht im selben Cluster? Die Aufgabe scheint noch nicht eindeutig definiert zu sein.


sind sie doch? Also die erste Spalte stellt hier den ersten Cluster dar, die zweite den nächsten usw (der Rest wird mit leeren cells aufgefüllt):

Code:

% 1      2        3
[1, 2] [8, 4] [6, 10]
[2, 3] [4, 7] []
[3, 9]  []      []
[5, 1]  []      []
% etc.
 


Jan S hat Folgendes geschrieben:

Eine Lösung wäre es ...


Danke, das sieht schonmal vielversprechend aus! Werd ich morgen gleich mal ausprobieren.

Schöne Grüße,
eey
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2013, 11:03     Titel: Re: Cell Array aus Tupel sortieren?
  Antworten mit Zitat      
Hallo nochmal,

leider funktioniert die vorgeschlagene Methode nicht so wie gewünscht...

Jan S hat Folgendes geschrieben:

Jetzt kannst Du per HISTC die gleichen Zahlen in der ersten Spalte suchen:
Code:
P = unique(M(:, 1));
[count, Bin] = histc(M(:,1), P));



Das Problem ist, dass eine Zugehörigkeit verschiedener Module nicht nur anhand der ersten Spalte bestimmt werden kann, auch wenn diese sortiert ist.

Wenn ich etwa diese Tupel habe:

Code:

[1, 2] % 1
[2, 3] % 2
[8, 4] % 3
[4, 7] % 4
[3, 9] % 5
[6, 10] % 6
[5, 1] % 7
 


dann ergibt das sortiert:


Code:

[1, 2] % 1
[2, 3] % 2
[4, 8] % 3
[4, 7] % 4
[3, 9] % 5
[6, 10] % 6
[1, 5] % 7
 


Zusammen gehören etwa die Nummern 1, 2, 5 und 7. Wenn jetzt aber nur schaue welche Tupel in der ersten Spalte gleich sind, werde ich nur 1 und 7 als zusammen gehörig klassifizieren können.

Das ist irgendwie ganz schön verzwickt Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.09.2013, 11:49     Titel:
  Antworten mit Zitat      
ok das ist recht quick and dirty programmiert aber vieleicht giebt es dir ja anregungen wie du es lösen kannst.
Code:
M={[1, 2];[2, 3];[8, 4];[5, 1];[3, 9];[4, 7];[6, 10]};
m=cell2mat(M);
n=1;
um=unique(m);
for k=1:numel(um)
a=m(m(:,1)==um(k) | m(:,2)==um(k),:);
m(m(:,1)==um(k) | m(:,2)==um(k),:)=[];
ua=unique(a);
j=1;
while j<numel(ua)
    a2=m(m(:,1)==ua(j) | m(:,2)==ua(j),:);    
    a=[a;a2];
    m(m(:,1)==ua(j) | m(:,2)==ua(j),:)=[];
    j=j+1;
    if ~isempty(a2)
        j=1;
        ua=unique(a);
    end
   
end
c{n}=a;
n=n+1;
if isempty(m)
break;
end
   
end
c(cellfun(@isempty,c))=[] ;

oder
Code:
clearvars
M={[1, 2];[2, 3];[8, 4];[5, 1];[3, 9];[4, 7];[6, 10]};
m=cell2mat(M);
c=cell(1);
n=0;
for k=1:size(m,1)
    if any(any(cell2mat(c)==m(k,1) | cell2mat(c)==m(k,2)))
        for j=1:numel(c)
            if any(any(c{j}==m(k,1) | c{j}==m(k,2)))
                c{j}=[c{j};m(k,:)];
                break
            end
        end
    else
        n=n+1;
        c{n,1}=m(k,:);
    end
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2013, 14:07     Titel:
  Antworten mit Zitat      
Funktioniert wie gewünscht, vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.09.2013, 02:10     Titel: Re: Cell Array aus Tupel sortieren?
  Antworten mit Zitat      
Hallo eey,

Ah, jetzt habe auch ich es verstanden. Mir war nicht klar, wie die einzelnen Cluster spaltenweise auf das Cell-Array aufgteilt worden sind.

Gruß, Jan
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.