计算多个向量的成员资格变化数

时间:2017-06-17 04:30:01

标签: matlab vector neural-network membership

我有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 作为参考。让我们考虑 V1 中的第1组。前5个元素属于同一组。在 V2 中,情况已不再如此,因为V2(1,1)V2(5,1)与其余元素的值不同,因此被视为已切换/更改了成员资格。应用相同的原理,第2组没有开关(即V1(6,1)V2(6,1)),第3组没有开关,第4组没有开关。总共有3个开关。

起初我认为这将是一个简单的计算,没有。 of switches = 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)。

旁注:这实际上是一个网络问题: V1 V2 是分区,我正在尝试计算节点切换成员资格的时间。

1 个答案:

答案 0 :(得分: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)