将分组应用于大于平均值的值

时间:2013-04-04 04:10:15

标签: matlab

我有一个向量,我想根据向量中值的滚动平均值进行分组。如果值大于平均值,我将它们放在第1组中,如果它们更小,则进入第2组。

根据其值是否大于当前平均值,可以使用什么函数为每个值赋予一个组号值。

2 个答案:

答案 0 :(得分:0)

没有简单的功能可以做到这一点。你需要这样的东西:

N = length(vec);
[lo_group hi_group] = deal( NaN(ceil(N/2),1) );
[sum lo_ct hi_ct] = deal(0);
for i=1:N
   v = vec(i);
   sum = sum + v;
   avg = sum/i;
   if v>avg
      hi_ct = hi_ct + 1;
      hi_group(hi_ct) = v;
   else
      lo_ct = lo_ct + 1;
      lo_group(lo_ct) = v;
   end
end

答案 1 :(得分:0)

我认为没有为数组条目分配“标签”的功能。

假设v是你的输入向量,一个简单的方法就是:

v(v>mean(v)) %Group 1
v(v<mean(v)) %Group 2

如果你打算用它做更多的事情,你可以做以下事情:

avg = mean(v);
flag = zeros(size(v));
for i=1:numel(v)
   if(v(i)>avg)
      flag(i) = 1;
   else
      flag(i) = 2;
   end
end

flag将包含您必需的分组。现在,如果您想要组v1的元素,则可以使用:

v(flag==1)

如果你想要滚动平均值,这取决于你如何计算它,但同样的基本方法就足够了。