2017-06-17 54 views
0

我有2個向量,其中一個相似的值的元素被認爲是相同的基團,像這樣的數:計數的成員的變化在多個矢量

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 

在這個例子中,V1有4組,組1有前5個元素,組2有下1個元素,組3有下4個元素,組4有最後2個元素。 V2有5組,第1組具有第一元件,組2具有下一個3種元素等

現在,我想計數的時間的元素切換組的數量,使用V1作爲參考。讓我們考慮組1中的V1。前5個元素在同一組中。在V2中,不再是這種情況,因爲V2(1,1)V2(5,1)與剩餘元素的值不同,因此被認爲具有交換/更改的成員資格。應用相同的原理,組2沒有開關(即,V1(6,1)V2(6,1)),組3沒有開關,組4沒有開關。總共有3個開關。

起初我以爲這是一個簡單的計算沒有。的開關= numel(unique(V1)) - numel(unique(V2))。但是,正如您所看到的,這會低估交換機的數量。有沒有人有解決這個問題?

我也歡迎更簡單的問題的解決方案,其中V1僅包含一個基團,如下所示:

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 

在此第二種情況下,計數是開關4個節點:V2(1, 1),V2(8,1),V2(10,1),V2(11,1)。

邊注:這其實是一個網絡問題:V1V2是分區和我試圖計算節點切換成員的時間數量。

回答

2

這裏是一個解決方案使用uniqueaccumarray

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

,或者您可以使用histcounts

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

哇,你使它看起來那麼簡單!謝謝你,rahnema1! –

+0

@ A.Rainer如果可以幫忙,很高興! – rahnema1