2

私は大規模なデータセットを持っており、730 個の値がすべて 1 つの列 (つまり 730 行) に含まれています。データを 24 個のグループに分割したいのですが、最後のグループには 10 個の値しかありません (730 は 24 で割り切れないため)。

24 個の値の各セットの平均を見つけたいのですが、Matlab でこれを行う簡単な方法はありますか?

4

3 に答える 3

2

ベクトルを指定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
于 2012-12-01T00:09:54.360 に答える
1

24 行ごとの移動平均を探している場合は、フィルターを使用する必要があります。

y = filter(ones(24,1), 24, x)

また

y = filter(ones(24,1)./24, 1, x)
于 2012-11-30T22:41:36.397 に答える
0

あなたが何をしようとしているのか正確にはわかりません。

Matlab には、列の平均を取ることができる組み込みの平均関数があります。

配列スプライシング表記法を使用して、列のさまざまな部分を選択できます。

たとえば、列の名前が xs の場合:

mean(xs(1:24))

xs の最初の 24 個の値の平均 (平均) を取得します。

于 2012-11-30T22:27:29.710 に答える