计算第一个零元素的数量

时间:2014-12-02 09:33:34

标签: matlab

我会排队找到第一个连续零元素的数量。例如,在[0 0 1 -5 3 0]中,我们有两个零连续元素,它们首先出现在向量中。

你可以在不使用for循环的情况下建议一种方法吗?

5 个答案:

答案 0 :(得分:4)

V=[0 0 1 -5 3 0] ;
k=find(V);
Number_of_first_zeros=k(1)-1;

或者,

Number_of_first_zeros=find(V,1,'first')-1;

解决@The minion评论(如果这是目的):

Number_of_first_zeros=find(V(find(~V,1,'first'):end),1,'first')-find(~V,1,'first');

答案 1 :(得分:1)

您可以使用find找到第一个非零元素的位置。

I=find(A, 1);

前导零的数量是I-1。

答案 2 :(得分:1)

使用逻辑数组查找零,然后查看0和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的第一个索引将是第一组零的结尾。

答案 3 :(得分:0)

我的解决方案非常复杂,但它并没有使用循环,它可以解决问题。我很确定,有更直接的方法。 以防万一没有人在这里发布我的想法。

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情况。

答案 4 :(得分:0)

我假设您的问题如下:对于后面的向量[0 0 1 -5 3 0],我想找到一对0值的第一个元素的索引。它是否正确?因此,向量的所需输出将为“1”?

要扩展其他答案以找到任何此类对,而不仅仅是0 0(例如0 0,0 2,3 4等),那么这可能有所帮助。

% define the pattern

ptrn = [ 0 0 ];

difference = ptrn(2) - ptrn(1)

V = [0 0 1 -5 3 0 0 2 3 4 0 0 1 0 0 0]

x = diff(V) == difference

indices = find(x)

indices =

 1     6    11    14    15