【问题标题】:Mean day with hourly data from a week一周中每小时数据的平均天数
【发布时间】:2015-08-19 03:25:49
【问题描述】:

我有一个 24*7 行(列周的每小时数据)和 52 列(一年中的周)的矩阵。

我想计算每周的平均天数(24 小时)(生成 24×52 矩阵)。通常我会reshape 每周的向量,这样我就可以有 24 行和 7 列,然后我可以每小时计算平均值,从而得出该周的平均一天。

但是,一年有 52 周,所以这个reshape 是不现实的。 有谁知道如何计算一天中每个小时的平均值,以便在不重塑每周初始列的情况下创建一个平均日?

【问题讨论】:

  • 我理解正确吗,你有一个矩阵,其中每一列代表一周内的小时值(24*7),现在你想要那个平均值(导致 1x52 向量?)?或者只是每天的平均值导致 7x52 矩阵?
  • 还是只需要全天平均 7x1 数组?
  • 没有。我有一个 24*7 行和 52 列的矩阵。每列代表一周。我想要一个 24 行 52 列的最终矩阵,这样我就可以代表每周的平均天数。
  • 这些值的顺序是这样的:day1hour1;day1hour2;day1hour3 等还是这样 day1hour1;day2hour1;day3hour1 等?
  • day1hour1;day1hour2;day1hour3

标签: matlab matrix average mean days


【解决方案1】:

我不明白为什么不用reshape?

reshaped = reshape( allData, [24 7 52] );
avg = mean( reshaped, 2 ); %// average over the seven days

你可能想squeeze最后的结果...

【讨论】:

  • 正在写同样的答案,我认为这是要走的路(你走)
  • 使用 reshape 我不确定这些值,因为我不太擅长 matlab,一旦 reshape 是 3D,我就无法确认我在做什么.无论如何,非常感谢您的帮助。我已经用for循环完成了这个,最后我明白了。还是谢谢你!
  • @PingP 如果你想避免重塑成 3D,你可以reshape 到 7x(24*52),然后 mean 列,然后 reshape 回来。
  • @PingP 你可以尝试reshape 作为练习,在你实现for 循环之后,你可以比较两个结果来验证你确实做对了。这个练习应该可以提高你对 Matlab 的理解和信心。
【解决方案2】:

如果你真的真的不想使用reshape,你可以使用accumarray。
首先构造将 24*7×52 输入中的输入与 24×52 输出相关联的索引:

rows = repmat( 1:24, [1 7*52] );
cols = repmat( 1:52, [7*24 1] );
avg = accumarray( [rows(:) cols(:)], allData(:), [24 52], @mean );

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多