Matlab 计算前零个元素的数量
我会用一行来求第一个连续零元素的个数。例如,在[0 0 1-5 3 0]中,有两个连续的零元素首先出现在向量中 你能建议一种不使用for循环的方法吗Matlab 计算前零个元素的数量,matlab,Matlab,我会用一行来求第一个连续零元素的个数。例如,在[0 0 1-5 3 0]中,有两个连续的零元素首先出现在向量中 你能建议一种不使用for循环的方法吗 V=[0 0 1 -5 3 0] ; k=find(V); Number_of_first_zeros=k(1)-1; 或者 要解决@仆从评论(如果这是目的的话): 或者 要解决@仆从评论(如果这是目的的话): 您可以使用find找到第一个非零元素的位置 I=find(A, 1); 前导零的数量为I-1。您可以使用find找到第一个非零元素的位
V=[0 0 1 -5 3 0] ;
k=find(V);
Number_of_first_zeros=k(1)-1;
或者
要解决@仆从评论(如果这是目的的话):
或者
要解决@仆从评论(如果这是目的的话):
您可以使用find找到第一个非零元素的位置
I=find(A, 1);
前导零的数量为I-1。您可以使用find找到第一个非零元素的位置
I=find(A, 1);
前导零的数量是I-1。我的解决方案非常复杂,但它不使用循环,而且它做到了这一点。我很肯定,有一种更直接的方法。 以防没有其他人在这里发布有效的解决方案
x=[1 2 4 0 20 0 10 1 23 45];
x1=find(x==0);
if numel(x1)>1
x2=[x1(2:end), 0];
x3=x2-x1;
y=find(x3~=1);
y(1)
elseif numel(x1)==1
display(1)
else
display('No zero found')
end
x
是数据集x1
包含所有零元素的索引x2
包含除第一个索引外的所有索引(因为矩阵维度必须一致,所以添加了一个零。x3
是该索引与数据集中以前的零索引之间的差异。现在我找到了所有不是1(与零序列不对应)的差异以及第一个索引(这些数据中的一个是所需的结果。如果只有一个或根本没有零,则需要if case。我的解决方案非常复杂,但它不使用循环,而且它实现了这个技巧。我非常确定,有一种更直接的方法。
以防没有其他人在这里发布有效的解决方案
x=[1 2 4 0 20 0 10 1 23 45];
x1=find(x==0);
if numel(x1)>1
x2=[x1(2:end), 0];
x3=x2-x1;
y=find(x3~=1);
y(1)
elseif numel(x1)==1
display(1)
else
display('No zero found')
end
x
是数据集。x1
包含所有零元素的索引。x2
包含除第一个之外的所有这些索引(因为矩阵维度必须一致,所以添加了一个零。x3
是索引和数据集中以前的零索引之间的差异。现在我找到了所有不是1(不对应于零序列)和第一个索引的差异(此数据中的一个是必需的结果。如果只有一个零或根本没有零,则需要使用if case。使用逻辑数组查找零,然后查看零和一交替的位置
V=[1 2 0 0 0 3 5123];
diff(V==0)
ans =
0 1 0 0 -1 0
创建示例数据
V=[1 2 0 0 0 3 5123];
找到零。结果将是一个逻辑数组,其中1
表示零的位置
D=V==0
D =
0 0 1 1 1 0 0
取该数组的差值。1
表示开始,-1
表示结束
T= diff(D)
ans =
0 1 0 0 -1 0
find(T==1)
将为您提供开始和find(T==1)
会给你一个结束。T==1的第一个索引+1将是第一组零的开始,而T==-1
的第一个索引将是第一组零的结束。使用逻辑数组找到零,然后查看零和一交替的位置
V=[1 2 0 0 0 3 5123];
diff(V==0)
ans =
0 1 0 0 -1 0
创建示例数据
V=[1 2 0 0 0 3 5123];
找到零。结果将是一个逻辑数组,其中1
表示零的位置
D=V==0
D =
0 0 1 1 1 0 0
取该数组的差值。1
表示开始,-1
表示结束
T= diff(D)
ans =
0 1 0 0 -1 0
find(T==1)
将为您提供开始和find(T==1)会给你一个结束。T==1
的第一个索引+1将是第一组零的开始,T==-1
的第一个索引将是第一组零的结束。我假设你的问题如下:对于下面的向量[0 1-5 3 0],我想找到一对0值的第一个元素的索引。这是否正确?因此,向量的所需输出将为“1”
要扩展其他答案以找到任何这样的配对,而不仅仅是0(例如0 1、0 2、3 4等),这可能会有所帮助
%定义模式
ptrn=[0];
difference=ptrn(2)-ptrn(1)
V=[0 0 1-5 3 0 2 3 4 0 0 1 0 0 0]
x=diff(V)=差异
index=find(x)
指数=
1 6 11 14 15
我假设你的问题如下:对于下面的向量[0 0 1-5 3 0],我想找到一对0值的第一个元素的索引。这是正确的吗?因此,你的向量的期望输出是“1”
要扩展其他答案以找到任何这样的配对,而不仅仅是0(例如0 1、0 2、3 4等),这可能会有所帮助
%定义模式
ptrn=[0];
difference=ptrn(2)-ptrn(1)
V=[0 0 1-5 3 0 2 3 4 0 0 1 0 0 0]
x=diff(V)=差异
index=find(x)
指数=
1 6 11 14 15
只有当数据以一组零开始时才有效。如果它是类似于[1 2 0 0 0 3 5123…]的东西,则不起作用。
仅当数据以一组零开始时才起作用。如果它是类似于[1 2 0 0 0 0 3 5123…]的东西,则不起作用。
仅当数据以一组零开始时才起作用。如果它是类似于[1 2 0 0 3 5123…]
仅当数据以一组零开始时才起作用。如果它类似于[1 2 0 0 0 3 5123…]
在一系列相关零之后,第一个数字不需要1。可以是任何数字,例如[0 0 4 5 0 2],[0 0 0 0 3]没有必要1,下面代码中的1
是用于索引,而不是用于值。我看到了对这个问题的几种解释。Wild[6 4 3 0 1 2 0 5]
输出1
、2
、4
或7
?在一系列相关零之后,第一个数字不是必需的1。可以是任何数字,例如[0 4 5 0 2],[0 0 0 0 3]没有必要1,下面代码中的1
是用于索引,而不是用于值。我看到了对这个问题的几种解释。将[6 4 3 0 1 2 0 5]
输出1
,2
,4
或7