Matlab 计数以零分隔的回合数
我有一个像这样的向量:Matlab 计数以零分隔的回合数,matlab,count,zero,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] 我想计算它包含多少组非零元素并保存它们 所以我想隔离: [1 2 1 4 5] [12] [2 3 2] [33] 然后计算组数(应为4):) 你能帮我吗 感谢统计您的群组,一种快速矢量化方法是: 这假设A是一个行向量,如示例中所示。这适用于无零、全零、空向量和我尝试过的其他几个测试用例 要获得自己的值组,可以使用变体: 在您的情况下,将len替换为 finish =
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 4 5]
[12]
[2 3 2]
[33]
然后计算组数(应为4):)
你能帮我吗
感谢统计您的群组,一种快速矢量化方法是: 这假设
A
是一个行向量,如示例中所示。这适用于无零、全零、空向量和我尝试过的其他几个测试用例
要获得自己的值组,可以使用变体:
在您的情况下,将len
替换为
finish = find([d -a0(end)]==-1) % Last index of each group
start
、len
和finish
的length
应该与count
的值相同,因此如果需要进行拆分,您可以使用该值。然后可以使用start
和len
(或finish
)将组存储在单元格数组、结构或其他不规则数组中。例如:
count = length(start);
B = cell(count,1);
for i = 1:count
B{i} = A(start(i):finish(i));
end
谢谢还有没有一种快速分割它们的方法?我的实向量包含多达10000个元素…好的,我会看一看,最后问一个单独的问题,谢谢!ps是的,这个计算在for循环中…@gabboshow:我知道你也问过关于分组的问题,所以我编辑了我的答案来添加这一部分。@gabboshow:太好了。很抱歉对这个问题最初的误解。这里的事情发展得太快了。
finish = find([d -a0(end)]==-1) % Last index of each group
count = length(start);
B = cell(count,1);
for i = 1:count
B{i} = A(start(i):finish(i));
end