在Matlab中的平均值

时间:2012-11-30 22:07:37

标签: matlab octave

我有一个大数据集,730个值都在一列中(即730行)。我想将数据分成24组,除了最后一组只有10个值(因为730不能被24整除)。

我想找到每组24个值的平均值,在Matlab中有一个简单的方法吗?

3 个答案:

答案 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个值的平均值(平均值)。