Matlab 计算前零个元素的数量

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找到第一个非零元素的位

我会用一行来求第一个连续零元素的个数。例如,在[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找到第一个非零元素的位置

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