【问题标题】:average of an array数组的平均值
【发布时间】:2012-08-17 07:19:56
【问题描述】:

我有一个 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 行 400k 列还是 4 列 400k 行?貌似是后者……

标签: matlab average


【解决方案1】:

我并不完全清楚你的数据是如何布局的,所以我会给你一个解决方案来解决我认为你的意思。

假设你有

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

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2013-10-25
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多