Matlab 计算跨多个向量的成员资格更改数

Matlab 计算跨多个向量的成员资格更改数,matlab,vector,neural-network,membership,Matlab,Vector,Neural Network,Membership,我有两个向量,其中具有相似值的元素被视为属于同一组,如下所示: 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 V2 2 7 2 8 2 8 2 8 2 8 2 8 2 8 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    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
在本例中,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

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    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是分区,我正在尝试计算节点切换成员身份的次数。

下面是一个使用
unique
accumarray
的解决方案

    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)

以下是使用
unique
accumarray

    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)

哇,你让它看起来这么简单!谢谢你,rahnema1@雷纳很高兴能帮上忙!哇,你让它看起来这么简单!谢谢你,rahnema1@雷纳很高兴能帮上忙!