Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中矢量元素的转换_Matlab_Vector_Break_Elements - Fatal编程技术网

matlab中矢量元素的转换

matlab中矢量元素的转换,matlab,vector,break,elements,Matlab,Vector,Break,Elements,对于一个项目,我试图在向量中找到一系列1中的第一个。例如,我将以下内容作为输入: 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

对于一个项目,我试图在向量中找到一系列1中的第一个。例如,我将以下内容作为输入:

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

任何帮助都将不胜感激。

轻松使用
diff
。不需要循环

Y1 = [ x1(1) diff(x1)==1 ];
或同等地

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


工作原理:计算一个元素相对于前一个元素的差异。当这个差值为1时,新一轮的1开始了。第一个元素需要特殊处理。

使用
diff
简单。不需要循环

Y1 = [ x1(1) diff(x1)==1 ];
或同等地

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


工作原理:计算一个元素相对于前一个元素的差异。当这个差值为1时,新一轮的1开始了。第一个元素需要特殊处理。

对@Luis的答案的概括,适用于向量不仅仅包含0和1的情况:

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

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

对于向量不只是包含0和1的情况,@Luis对答案的概括:

Y1 = diff([0 x1]) & x1 == 1
这将检查该值是否为1,以及它是否与以前的值不同。

@user2991702欢迎:-)如果您是Matlab新手,请尝试执行“矢量化”操作(如我的回答所示)。在很多情况下,循环可以在其他语言中使用,但在Matlab中,通过一些向量化操作,例如
diff
sum
等,循环可以更容易(通常更快)完成。@user2991702欢迎:-)如果你是Matlab新手,尝试做一些“向量化”的事情(如我的回答)。在很多情况下,循环可以在其他语言中使用,但在Matlab中,通过一些向量化操作,例如
diff
sum
等,循环可以更容易(通常更快)完成。