ベクトル内の値のローリング平均に基づいてグループ化したいベクトルがあります。値が平均よりも大きい場合はグループ 1 に配置し、小さい場合はグループ 2 に配置します。
その値が現在の平均より大きいかどうかに基づいて、私のベクトル内の各値にグループ番号を与えるために使用できる関数は何ですか?
ベクトル内の値のローリング平均に基づいてグループ化したいベクトルがあります。値が平均よりも大きい場合はグループ 1 に配置し、小さい場合はグループ 2 に配置します。
その値が現在の平均より大きいかどうかに基づいて、私のベクトル内の各値にグループ番号を与えるために使用できる関数は何ですか?
配列エントリに「ラベル」を割り当てる機能はないと思います。
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
必要なグループ化が含まれます。v
in groupの要素が必要な場合は、次の1
ように簡単に使用できます。
v(flag==1)
ただし、ローリング平均が必要な場合は、計算方法によって異なりますが、同じ基本的な方法で十分です。
それを行う単純な関数はありません。次のようなものが必要です。
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