-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]
4

1 回答 1

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

并且您希望从第 1 行到第 4 行、第 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.

于 2012-08-17T07:49:11.890 回答