Matlab 删除相邻的重复术语
我有以下向量Matlab 删除相邻的重复术语,matlab,vector,duplicates,unique,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的唯一元素,而我想要的是删除“重复项”。。。如何执行此操作?看起来像是运行长度编
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
的唯一元素,而我想要的是删除“重复项”。。。如何执行此操作?看起来像是运行长度编码问题(检查)。您可以修改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)
返回一个长度(长度(a)-1)的数组,我们希望在开始处添加一个值(即a(1)
),以获得与a
大小相同的向量。这里我们减去1,因此,正如@surgical_tube所提到的,命令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找到它。那么答案对您有帮助吗?是的,很抱歉没有标记为已回答。当然,我想知道它是否有帮助,谢谢:)