计算多个向量中成员变化的数量
Count the number of membership changes across multiple vectors
我有 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)
与其余元素的值不同,因此被认为具有 [=47= 】 会员资格。同理,第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)。
旁注:这实际上是一个网络问题:V1 和 V2 是分区,我正在尝试计算节点切换成员资格的时间。
这是使用 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)
我有 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)
与其余元素的值不同,因此被认为具有 [=47= 】 会员资格。同理,第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)。
旁注:这实际上是一个网络问题:V1 和 V2 是分区,我正在尝试计算节点切换成员资格的时间。
这是使用 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)