保持顺序和重复的独特功能的类比(MATLAB)

时间:2014-09-02 15:53:16

标签: matlab

假设我有数据: x = [3,3,1,1,1,2,2,1,1,1,1]
我想要输出:
y = [3,1,2,1]
使用unique()函数我可以得到:
z = [3,1,2]

但是如你所见,我最终错过了“一个”。 所以,我试着写一个循环,但是没有做我应该做的事情。 我期望它删除其中一个重复值,循环应该确保只剩下一个值。但是,输出是:
X = [3,3,1,1,2,1,1]
循环:
    for i=1:length(x)
    if x(i)==x(i+1)
x(i)=[];
end;
end;
有没有办法像y一样生成输出?我的循环中的错误在哪里?

2 个答案:

答案 0 :(得分:5)

如果您更喜欢无循环方式 -

y = x([1 diff(x)~=0]==1)

或者

y = x([1 abs(diff(x))]>0)

或者

y = x([1 diff(x)]~=0)

答案 1 :(得分:2)

问你的问题也问,代码中的错误在哪里,答案就是这样。以下是您的代码的变体,有效:

x = [3,3,1,1,1,2,2,1,1,1,1];
for i=length(x):-1:2
    if x(i)==x(i-1)
        x(i)=[];
    end;
end;
  1. 在您的循环i中,从1到length(x)。在最后一次迭代中,没有i+1元素,因为i已经等于length(x)
  2. 当在循环中删除向量的元素时,从结尾到开始循环是一种常见的技术,而不是从开始到结束。那么你的代码就可以了。