0

对于一个项目,我试图在向量中找到一系列的第一个。例如,我有输入:

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,所有后续的1都需要变成零。

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

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

2 回答 2

4

轻松与diff。不需要循环。

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

或等效地

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

这是如何工作的:diff计算一个元素相对于前一个元素的差异。当该差异为 1 时,新一轮的运行已开始。第一个元素需要特殊处理。

于 2013-11-14T11:09:39.417 回答
0

@Luis 对您的向量不仅包含零和一的情况的答案的概括:

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

这将检查该值是否为 1,以及它是否与先前的值不同。

于 2013-11-14T13:18:40.967 回答