2012-08-17 151 views
-2

我有一个有4行和400,000列的矩阵。我需要获得连续4行的平均值。也就是说,第1行到第4行,第5行到第8行的平均值等。数组的平均值

4列应该保持原样。我知道这可能是幼儿园水平问题,但我很欣赏在Matlab中编写程序的任何提示;我有一些编写Matlab程序的经验。

数据的一个例子可以如下:

[1 2 3 2; 
5 6 7 2; 
9 6 7 6; 
5 2 3 2; 
9 8 7 6; 
6 5 4 3; 
4 3 2 1; 
9 8 7 6] 

我想要的结果为:

[5 4 5 3],[7 6 5 4] 
+2

社区通常期望您发布一些代码,演示您已经尝试过的内容,或许需要帮助更正部分代码。您可以通过点击上面的“编辑”链接来编辑您的问题。 – razlebe 2012-08-17 07:42:21

+2

现在是什么? 4行400k列或4列和400k行?看起来像后者... – 2012-08-17 07:55:42

回答

2

这是不完全清楚,我的数据是如何奠定了,所以我我会给你一个解决方案,我认为你的意思。

假设你有

a = [ 
    1 2 3 4 %# row 1 
    2 3 4 5 
    3 4 5 6 
    4 5 6 7 %# row 4 
    5 6 7 8 %# row 5 
    ... 
    ];    %# row m 

,并且希望通过4平均下来行1列,5至8等 你可以做到这一点只需

averages = reshape(mean(reshape(a,4,4,[])),[],4) 

故障:

A = reshape(a,4,4,[]) 

将矩阵中的数据重新排列为3D数组。该阵列的每个3D“层”都是一个4x4矩阵。

B = mean(A) 

这需要沿列的方向(方向1)。请阅读help mean了解更多信息。

C = reshape(B,[],4) 

该重新排列平均的阵列回Nx4矩阵,其中N=m/4