删除相邻的重复项

Delete adjacent repeated terms

我有以下向量 a:

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

来自 a 我想删除所有 "adjacent" 重复以获得:

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 只真正获取了 aunique 元素,而我想要的是删除 "duplicates"。 .. 我该怎么做?

看起来像是 运行 长度编码问题(检查 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)returns是一个长度为(length(a)-1)的数组,我们想在开头(即a(1))处加一个值得到a矢量大小与 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