如何在大型矩阵(27x16800)中获得每10个数字的平均值。 我找不到解决方案 如果有人可以帮助,那就太好了。
UPD对不起,我应该更清楚了。我有27个主题的记录值矩阵(16800)。每个主题对应于该行;我想获得一个包含27个主题的新矩阵,其中平均行数为1680(而每10个旧数字将平均为1个“新”平均数)。
答案 0 :(得分:0)
给出一个随机数据矩阵x
:
x = randn(27,16800);
您可以按照Luis Mendo和Brice在评论中描述的两种类似方式,计算沿行的所有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
可能不是。卷积方法可能比其他方法要慢一些,但它是通用的并且易于适应。