4

我在 Matlab 中有一个 4 维矩阵(时间、one_variable、Y_location、X_location)。

这是 4-d 矩阵的样子:

>> size (npp_data_pft1)
ans =
100     1   289   570

100 表示 100 个时间步长;1 表示这里只有 1 个变量;289 和 570 是 y 和 x 网格单元格索引。

如何获得特定区域的平均值?

例如,我希望在 33 < Y_location < 47 和 112 < X_location < 176 的区域内获得时间步 1 的平均值。

4

3 回答 3

10

一种方法是提取您的区域,然后取平均值。

A = npp_data_pft1(1, 1, 33:47, 112:176);
mean(A(:))    % returns scalar value
于 2013-09-18T19:50:45.170 回答
7

这是诀窍:

M = npp_data_pft1(:, 1, 33:47, 112:176);
mean(reshape(M,[],size(M,3)*size(M,4))');

在此示例中,答案将输出每个值与您选择的每帧区域的平均值。我将 4D 矩阵重塑为 2D 矩阵。该矩阵有 100 行(总帧数)和 975 列(所选区域中的总像素数)。然后仅使用mean该 2D 矩阵将产生每帧整个区域的平均值。(我曾经'让平均值在正确的维度上工作,而不是你可以使用mean(...,2)

于 2013-10-02T04:21:46.110 回答
2

我假设您想要对多个时间值进行平均。在这种情况下,我建议以下内容,其中1:20表示您要观察的时间值范围:

mean(mean(npp_data_pft1(1:20, 1, 33:47, 112:176),3),4);

这给出了一个具有所需平均值的 20x1 向量。

请注意, 的第二个参数mean表示沿哪个维度计算平均值。

于 2013-10-02T09:39:24.497 回答