我有一个这样的向量:
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):)
你能帮我吗?
谢谢
要计算您的组,使用逻辑索引的快速矢量化方法是:
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
length
of start
, len
, andfinish
应该与 of 的值相同,因此count
如果需要拆分,则可以使用它。然后,您可以使用start
and len
(or finish
) 将您的组存储在单元格数组或结构或其他一些参差不齐的数组中。例如:
count = length(start);
B = cell(count,1);
for i = 1:count
B{i} = A(start(i):finish(i));
end