matlab:相同数字的平均组大小

时间:2012-04-09 05:25:31

标签: string matlab search grouping

我有一个像

这样的字符串
a = 011112220010111122221110101111222201111111100022221111101101011... 

我希望找到一组0s,1s和2s的平均大小(在这个例子中,所有这些大约为3-4)。这样做的简单方法是什么? 谢谢!

2 个答案:

答案 0 :(得分:0)

我不知道matlab但我可以写一个伪代码,你可以使用它。

int zeros <- 0 
int ones <- 0 
...
for(i = 0 ; i < a.lenght(or size) ; i++)
   if(a[i] == 0)
     zeros++
   else if(a[i] == 1)
     ones++
...
(or you can use switch case statement)

答案 1 :(得分:0)

创建一个函数:

function avg = avg_group_size(s, g)
assert(all(ischar(s)) && ischar(g) && numel(g) == 1, 'bad input');
s = s(:); % column
not_g = char(g + 1);
s_prev = [not_g; s(1 : end - 1)];
s_next = [s(2 : end); not_g];
idx_first   = find(s_prev ~= g & s == g);
idx_last    = find(s_next ~= g & s == g);
avg = mean(idx_last - idx_first + 1);
return

并称之为:

avg_0 = avg_group_size(a, '0');

...

但这不是很有效的方式。如果速度很重要,则需要在一个循环中计算所有平均值。