我会排队找到第一个连续零元素的数量。例如,在[0 0 1 -5 3 0]中,我们有两个零连续元素,它们首先出现在向量中。
你可以在不使用for循环的情况下建议一种方法吗?
答案 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