在Matlab中对矩阵中的每10个数字求平均值

时间:2018-11-19 13:08:18

标签: matlab matrix average

如何在大型矩阵(27x16800)中获得每10个数字的平均值。 我找不到解决方案 如果有人可以帮助,那就太好了。

UPD对不起,我应该更清楚了。我有27个主题的记录值矩阵(16800)。每个主题对应于该行;我想获得一个包含27个主题的新矩阵,其中平均行数为1680(而每10个旧数字将平均为1个“新”平均数)。

1 个答案:

答案 0 :(得分:0)

给出一个随机数据矩阵x

x = randn(27,16800);

您可以按照Luis MendoBrice在评论中描述的两种类似方式,计算沿行的所有n=10值组的平均值:

y = permute(mean(reshape(x.', n, [], size(x,1)), 1), [3 2 1]); % Luis
y = squeeze(mean(reshape(x,size(x,1),n,[]),2));                % Brice

但是,正如Wolfie所指出的,只有在行长完全可以被n整除的情况下,这些方法才起作用。

通过卷积可以获得更通用的方法:

y = conv2(x,ones(1,n)/n,'valid');
y = y(:,1:n:end);

卷积输出中的每个矩阵元素是n个值的平均值。结果是n-1个元素比输入短。也就是说,我们已经计算了n倍的平均值。第二行采用每个n平均值的第一行,产生预期大小的输出。

卷积产生的结果与其他方法的数值不精确度不同(我的机器上最大差为4.4409e-16)。这是因为conv2是使用CPU的SIMD指令实现的,而mean可能不是。卷积方法可能比其他方法要慢一些,但它是通用的并且易于适应。