2

我有一个大数据集,730 个值都在一个列中(即 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 回答