【问题标题】:Delete adjacent repeated terms删除相邻的重复项
【发布时间】:2015-11-29 20:22:20
【问题描述】:

我有以下向量a

a=[8,8,9,9,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8]

来自a我想删除所有“相邻”重复获得:

b=[8,9,1,2,3,4,5,6,7,8]

但是,当我这样做时:

unique(a,'stable')

ans =

     8     9     1     2     3     4     5     6     7

你看,unique 只真正获得了a唯一 元素,而我想要的是删除“重复项”......我该怎么做?

【问题讨论】:

  • 这个答案对你有帮助吗?
  • 是的,很抱歉没有标记为已回答。
  • 当然我想知道它是否有帮助谢谢:)

标签: matlab vector duplicates unique


【解决方案1】:

这看起来像是一个行程编码问题(检查here)。您可以修改 Mohsen 的解决方案以获得所需的输出。 (即,我认为这段代码没有功劳,但我认为这个问题不是重复的)。

代码如下:

a =[8,8,9,9,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8]

F=find(diff([a(1)-1, a]));

由于diff(a) 返回一个长度为 (length(a) -1) 的数组,我们希望在开头添加一个值(即a(1))以获得与a 相同大小的向量。在这里,我们减去 1,以便正如 @surgical_tubing 所提到的,命令 find 有效地找到它,因为它查找非零元素,因此我们要确保该值不为零。

因此diff([a(1)-1, a]) 看起来像这样:

  Columns 1 through 8

     1     0     1     0    -8     0     1     0

  Columns 9 through 16

     1     0     1     0     1     0     1     0

  Columns 17 through 20

     1     0     1     0

现在找到了重复的元素,我们用find找到的位置索引回a

newa=a(F)

和输出:

newa =

  Columns 1 through 8

     8     9     1     2     3     4     5     6

  Columns 9 through 10

     7     8

【讨论】:

  • 看起来不错,我想问一下,当您附加a(1)-1 时,是否有任何特别的理由使用-1?我理解是允许记录第一个元素。
  • -1 没有什么特别之处。它只需要是任何不是 a(1) 的值就可以让 diff 找到它。
猜你喜欢
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多