如何在MATLAB中计算1值之间的连续0?

fae0ux8s  于 2023-10-23  发布在  Matlab
关注(0)|答案(1)|浏览(218)

有一个问题要求给定一个包含1和0的向量,返回一个向量,给出每个0之间的0的数量。举例来说:输入= [0 1 0 0 1 0 1 1 0 0 1 1 0 0]输出= [1 3 1 0 0 3 1 0 2]
我的代码:

function y = count_zero(x)
y = []
count = 0
for i = 1:length(x)
if x(i) == 0
count = count +1
elseif x(i) == 1
count = 0
end
y = horzcat(y,count)
end 
end

我知道我的代码是错误的,但我找不到一种方法来修改这段代码来解决这个问题

fivyi3re

fivyi3re1#

当你点击下一个1时,你应该只追加到y,而不是x中的每个元素。您可以通过在elseif中移动连接来实现这一点,但还需要在末尾进行移动以处理最后一个元素
您应该使用缩进来使代码更具可读性,并在每行末尾使用分号来抑制命令行输出。

function y = count_zero(x)
y = [];
count = 0;
for i = 1:length(x)
    if x(i) == 0
        count = count +1;
    elseif x(i) == 1
        y = horzcat(y,count);
        count = 0;
    end
end
y = horzcat(y,count);

如果你想要一个简短的方法来做到这一点,你可以find索引,其中x==1(在x的开始和结束处附加一个1来处理边缘情况),然后取这些索引之间的差。零的数量比索引的diff少一个。

y = diff(find([1,x,1]==1))-1;

相关问题