matlab中矢量元素的转换
对于一个项目,我试图在向量中找到一系列1中的第一个。例如,我将以下内容作为输入: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
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
等,循环可以更容易(通常更快)完成。