【问题标题】:MATLAB Average Every 5 ElementsMATLAB 平均每 5 个元素
【发布时间】:2013-07-05 20:04:06
【问题描述】:

我想取一个大矩阵并取其中所有 5x5 网格的平均值。

矩阵为 245x85x1255。我将矩阵重新整形为 5x4165x1255 大小(z 维度并不那么重要),我想取每行中元素 1:5、5:10、10:15 等的平均值。然后,使用生成的矩阵,我想平均五列。然后我将它调整回原来的形状(但当然更小)。

我不必这样做。我只需要取一个 5x5 的网格并平均其中的所有点。然后我取它旁边的下一个 5x5 网格并平均所有这些点。

这是我对第一个 5x5 网格的做法:

A = data_SpecificArea(:,1:5,:);
B = mean(A,2);
C = mean(B,1);

** 这是使用 blockproc 的工作代码

% Change dataAll_SpecificArea to a 1x1 degree grid (5x5 block averaging)
fun = @(block_struct) mean(block_struct.data);
A = blockproc(dataAll_SpecificArea,[5 1],fun); % Size goes from 245x85x1255 to 49x85x1255
B = blockproc(A,[1 5],fun); % Size is 49x17x1255

【问题讨论】:

  • 相邻块的重叠是故意的吗? 1:5 是 5 个元素,但 5:10 是 6 个元素并与前一个块重叠。也许您正在寻找1:56:1011:15、...在这种情况下,您应该使用1:5:4161 而不是1:4:4161

标签: matlab matrix average


【解决方案1】:

您可以为此使用blockproc。例如,

fun = @(block_struct) mean(block_struct.data);
new_matrix = blockproc(old_matrix,[5 5],fun);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多