我有这样的矢量:
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):)
你能帮我吗?
由于
答案 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
length
,start
和len
的{{1}}应与finish
的值相同,因此如果您需要,可以使用此值做分手。然后,您可以使用count
和start
(或len
)将您的组存储在单元格数组或结构或其他一些不规则的数组中。例如:
finish