计算并加总连续重复的数字

时间:2015-09-21 15:24:08

标签: arrays matlab

如何仅对连续重复的数字求和才能找到唯一值?例如,我有一个向量

A = [0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 0 1]

然后当仅对连续重复的数字求和时,我将

B = [0 1 0 1 0 2 0 1 0 1]

最后,唯一值的数量与01不同:

sum(B>1)

我知道解决问题的一种方法:

sum(diff(find(A==1))==1)

但似乎这不是一个好方法。

2 个答案:

答案 0 :(得分:1)

另一种解决方案:

A = [0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 0 1]

%// get Islands
a = cumsum(~A)
b = a(logical(A))
%// count occurences 
c = histc(b,unique(b))
%// count number of occurences > 1 
d = sum(c > 1)
%// or sum of occurences > 1  
e = sum(c(c > 1))
c =
     1     1     2     1     1
d =
     1
e = 
     2

答案 1 :(得分:0)

这将为您提供数组中重复值的总数,包括“0”值。

sum(A(1:end-1)-A(2:end)==0)

ans =
 7

如果您只对重复的“1”值感兴趣,可以将其更改为

sum(A(1:end-1)+A(2:end)==2)

ans =
 1

请注意,如果您有[1 1 1],那么这是重复次数,您将得到2而不是1.

相关问题