删除相邻的重复术语

时间:2015-09-03 20:45:39

标签: matlab vector duplicates unique

我有以下向量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唯一元素,而我想要的是删除"重复" ...我该怎么做?

1 个答案:

答案 0 :(得分:4)

它看起来像一个游程编码问题(检查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))以获得与{的大小相同的向量{1}}。这里我们减去1,这样,正如@surgical_tubing所提到的,命令a有效地找到它,因为它查找非零元素,所以我们要确保该值不为零。

因此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 找到的位置将{1}}索引回a

find

并输出:

newa=a(F)