2

我有一个这样的向量:

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

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

所以我想隔离:

[1 2 1 1 1 4 5]

[1 2]

[2 3 2 2 2]

[33]

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

你能帮我吗?

谢谢

4

1 回答 1

3

要计算您的组,使用逻辑索引的快速矢量化方法是:

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

这假设它A是您的示例中的行向量。这适用于无零、全零、空向量和我尝试过的其他几个测试用例。

要获得自己的值组,您可以使用我对类似问题的回答的变体:

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

lengthof start, len, andfinish应该与 of 的值相同,因此count如果需要拆分,则可以使用它。然后,您可以使用startand len(or finish) 将您的组存储在单元格数组或结构或其他一些参差不齐的数组中。例如:

count = length(start);
B = cell(count,1);
for i = 1:count
    B{i} = A(start(i):finish(i));
end
于 2013-07-25T23:39:58.837 回答