我有一个大数据集,730 个值都在一个列中(即 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 个值的平均值(平均值)。