私は大規模なデータセットを持っており、730 個の値がすべて 1 つの列 (つまり 730 行) に含まれています。データを 24 個のグループに分割したいのですが、最後のグループには 10 個の値しかありません (730 は 24 で割り切れないため)。
24 個の値の各セットの平均を見つけたいのですが、Matlab でこれを行う簡単な方法はありますか?
ベクトルを指定x
すると、たとえば次のようになります。
>> x = [11 4 3 3 4 22 4 5 32 3 53 23 5 4 6 4 452 ]';
そして、いくつかのバッチサイズ(あなたの場合は24、このおもちゃの例では5)
>> batchSize = 5;
NaN の行列を事前に割り当てることから始めます。(これにより、最後の奇数サイズのケースの処理が容易になります)
>> preAverage = nan(batchSize,ceil(length(x)/batchSize))
preAverage =
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
次に、値をx
新しいマトリックスに配置します。(これは列優先インデックスを使用するように設定されています)
>> preAverage(1:length(x)) = x;
preAverage =
11 22 53 4
4 4 23 452
3 5 5 NaN
3 32 4 NaN
4 3 6 NaN
次に、値nanmean
を無視して平均を取るために使用しNaN
ます。
>> batchedAvgValues = nanmean(preAverage)
batchedAvgValues =
5 13.2 18.2 228
24 行ごとの移動平均を探している場合は、フィルターを使用する必要があります。
y = filter(ones(24,1), 24, x)
また
y = filter(ones(24,1)./24, 1, x)
あなたが何をしようとしているのか正確にはわかりません。
Matlab には、列の平均を取ることができる組み込みの平均関数があります。
配列スプライシング表記法を使用して、列のさまざまな部分を選択できます。
たとえば、列の名前が xs の場合:
mean(xs(1:24))
xs の最初の 24 個の値の平均 (平均) を取得します。