2017-06-17 2 views
0

Ich habe 2 Vektoren, in denen Elemente eines ähnlichen Wert betrachtet aus der gleichen Gruppe zu sein, etwa wie folgt:Zähle die Anzahl der Mitgliedschaftsänderungen über mehrere Vektoren

V1 V2 

1  7 
1  8 
1  8 
1  8 
1  9 
2  10 
3  11 
3  11 
3  11 
3  12 
4  12 
4  12 

In diesem Beispiel V1 hat 4 Gruppen, Gruppe 1 hat die ersten 5 Elemente, Gruppe 2 hat das nächste 1 Element, Gruppe 3 hat die nächsten 4 Elemente und Gruppe 4 hat die letzten 2 Elemente. V2 hat 5 Gruppen, Gruppe 1 das erste Element hat, Gruppe 2 die nächsten 3 Elemente usw.

Nun würde Ich mag die Anzahl der Zeitschalter ein Elementgruppe zählen, V1 als die Verwendung von Referenz. Betrachten wir Gruppe 1 in V1. Die ersten 5 Elemente sind in derselben Gruppe. In V2 ist das nicht mehr der Fall, weil V2(1,1) und V2(5,1) nicht den gleichen Wert wie die übrigen Elemente haben und somit eine veränderte/geänderte Mitgliedschaft haben. Nach dem gleichen Prinzip gibt es keinen Schalter für Gruppe 2 (d. H. V1(6,1) und V2(6,1)), einen Schalter für Gruppe 3 und keinen Schalter für Gruppe 4. Insgesamt sind 3 Schalter.

Zuerst dachte ich, das wäre eine einfache Rechnung mit Nein. der Schalter = numel(unique(V1)) - numel(unique(V2)). Wie Sie jedoch sehen, unterschätzt dies die Anzahl der Switches. Hat jemand eine Lösung dafür?

I auch eine Lösung für ein einfacheres Problem erlaubt, in dem V1 nur eine Gruppe enthält, wie folgt aus:

V1 V2 

    2  7 
    2  8 
    2  8 
    2  8 
    2  8 
    2  8 
    2  8 
    2  9 
    2  8 
    2  10 
    2  10 
    2  8 

In diesem zweiten Fall wird der Zählwert 4 Knoten ist, die schalten: V2 (1, 1), V2 (8,1), V2 (10,1), V2 (11,1).

Side Hinweis: Dies ist eigentlich ein Netzwerkproblem: V1 und V2 Partitionen sind und ich versuche, die Anzahl der Zeitschalter ein Knoten Mitgliedschaft zu zählen.

Antwort

2

Hier ist eine Lösung mit unique und accumarray

u = unique([V1 V2],'rows'); 
    switches = accumarray(u(:,1) , 1, [],@numel)-1; 
    total_switches = sum(switches) 

oder Sie histcounts

u = unique([V1 V2],'rows'); 
    switches = histcounts(u(:,1) , [unique(u(:,1)); u(end,1)])-1; 
    total_switches = sum(switches) 
+0

Wow verwenden können, können Sie es so einfach aussehen zu lassen! Danke, rahnema1! –

+0

@ A.Rainer Froh, wenn es helfen kann! – rahnema1

Verwandte Themen