【问题标题】:Count and sum consecutive duplicate numbers对连续重复数字进行计数和求和
【发布时间】:2015-09-21 15:24:08
【问题描述】:

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

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)

不过好像不是什么好方法。

【问题讨论】:

  • 只有一和零吗?
  • 是的,只有一和零
  • 如果 `sum(diff(find(A==1))==1)` 做你想做的事,我看不出原因,为什么它不应该是一个好的解决方案。你不喜欢它什么?
  • 感谢您的回复。这是因为我可以看到向量 B 并且知道唯一值是 2。

标签: arrays matlab


【解决方案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

【讨论】:

    【解决方案2】:

    这将为您提供数组中重复值的总数,包括“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。

    【讨论】:

    • 我只对重复和连续的 ''1'' 值感兴趣,然后在上述情况下将它们相加为 2
    • 谢谢,“thewaywewalk”的答案很好,因为我可以知道唯一值的数量和相应的值。
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多