2013-11-14 80 views
0

对于一个项目,我试图找到矢量中的一系列元素的第一个。例如,我有作为输入:转换matlab中的矢量元素

x1=[1 0 0 1 1 1 0 1 0 1 0 0 1 1] 

,我需要的输出:

Y1=[1 0 0 1 0 0 0 1 0 1 0 0 1 0] 

所以每次出现在载体中的1,所有因之那些需要变成零。

我有以下代码,但由于某种原因,它只是返回Y1,其值完全与x1相同。

n=numel(x1); 
Y1=zeros(n,1); 
for i = 1:n 
if x1(i) == 1 
    Y1(i)= 1; 
    for j = (i+1): n 
     if x1(j)== 1 
      Y1(j)=0; 
     elseif x1(j) == 0 
      Y1(j)=0; 
      i=j+1; 
      break 
     end 
    end 
elseif x1(i) == 0 
    Y1(i)= 0; 
end 

end 

任何帮助将不胜感激。

回答

4

容易与diff。无需循环。

Y1 = [ x1(1) diff(x1)==1 ]; 

或等效

Y1 = diff([0 x1])==1; 

这是如何工作diff计算一个元件相对于前一元素的差。当这个差距是1时,新的一批已经开始。第一个要素需要特殊处理。

+0

谢谢你的回答,它的工作。 – user2991702

+0

@ user2991702欢迎:-)如果您是Matlab新手,请尝试做“矢量化”的事情(如我的答案)。有很多情况下,循环将用于其他语言,但在Matlab中,通过几个向量化操作(如diff,sum等)可以更容易地完成(通常更快)。 –

0

答案因为你的载体不只是包含零和的情况下的概括通过@Luis:

Y1 = diff([0 x1]) & x1 == 1 

该检查值是否是其中之一,而且无论是从以前的不同值。