计算由零分隔的回合数

时间:2013-07-25 23:29:21

标签: matlab count zero

我有这样的矢量:

A = [1 2 1 1 1 4 5 0 0 1 2 0 2 3 2 2 2 0 0 0 0 33]

我想计算它包含多少个非零元素的GROUPS并保存它们。

所以我想要孤立:

  

[1 2 1 1 1 4 5]

     

[1 2]

     

[2 3 2 2 2]

     

[33]

然后计算组(它们应该是4):)

你能帮我吗?

由于

1 个答案:

答案 0 :(得分:3)

要计算您的群组,使用logical indexing的快速矢量化方法是:

count = sum(diff([A 0]==0)==1)

这假设A是一个行向量,如示例所示。这没有零,全零,空向量,以及我尝试的其他几个测试用例。

要自行获取您的值组,您可以使用my answer to a similar question的变体:

a0 = (A~=0);
d = diff(a0);
start = find([a0(1) d]==1)           % Start index of each group
len = find([d -a0(end)]==-1)-start+1 % Length, number of indexes in each group

在您的情况下,将len替换为

可能是有意义的
finish = find([d -a0(end)]==-1) % Last index of each group

lengthstartlen的{​​{1}}应与finish的值相同,因此如果您需要,可以使用此值做分手。然后,您可以使用countstart(或len)将您的组存储在单元格数组或结构或其他一些不规则的数组中。例如:

finish