我有一个大数据集,730个值都在一列中(即730行)。我想将数据分成24组,除了最后一组只有10个值(因为730不能被24整除)。
我想找到每组24个值的平均值,在Matlab中有一个简单的方法吗?
答案 0 :(得分: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
答案 1 :(得分:1)
如果您要查找每24行的移动平均线,则应使用过滤器:
y = filter(ones(24,1), 24, x)
或
y = filter(ones(24,1)./24, 1, x)
答案 2 :(得分:0)
我不确定你到底想要做什么。
Matlab具有内置函数,可以取平均值。
您可以使用数组拼接符号选择列的不同部分。
例如,如果您的列名为xs:
mean(xs(1:24))
将获得xs的前24个值的平均值(平均值)。