1

我正在尝试执行分箱平均值。我正在使用代码:

Avg = mean(reshape(a,300,144,27));
AvgF = squeeze(Avg);

最后一行去掉了单件维度。

所以可以看出我平均超过300分。它工作正常,除非我的总点数不等于 144*300 的倍数。

即使总点数不是 144*300 的倍数,是否有任何方法可以使这种分箱平均工作?

编辑:对不起,如果我的问题听起来令人困惑。澄清...

我有一个包含 43200 行和 27 列的文件。我通过一次装箱 300 行来平均,这意味着最后我留下了一个大小为144-by-27的矩阵。

我上面写的代码只有在我正好有 43200 行时才有效。在某些情况下,我有 43199、43194 等。当我的总行数是 300(bin 大小)的倍数时,reshape 函数起作用。当我的总行数不是 300 的倍数时,有没有办法使这种分箱平均工作?

4

1 回答 1

2

我想我现在更好地理解了这个问题......

如果a是从您的文件中读取的数据(大小为N-by-27,其中 N 理想情况下为 43,200),那么我认为您需要执行以下操作:

nRemove = rem(size(a,1),300);  %# Find the number of points to remove
a = a(1:end-nRemove,:);        %# Trim points to make an even multiple of 300
Avg = mean(reshape(a,300,[],27));
AvgF = squeeze(Avg);

这将删除点,使得行数a将是 300 的倍数。然后你的重塑和平均应该工作。请注意,我[]在调用RESHAPE时使用了它,它可以确定列数应该是多少。

于 2009-11-24T16:23:23.827 回答