0

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

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

4

2 回答 2

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
于 2013-04-04T04:20:26.113 回答
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将包含您必要的分组。现在如果你想要vin group的元素1,你可以简单地使用:

v(flag==1)

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

于 2013-04-04T06:25:41.370 回答