【问题标题】:Matlab: mean value in 4-d matrixMatlab:4-d矩阵中的平均值
【发布时间】:2013-09-23 17:36:39
【问题描述】:

我在 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

【问题讨论】:

  • 请澄清问题是什么(最好用一个可重现的例子),现有的答案似乎已经符合您的要求。
  • 如果它让你更容易,你可以使用permute 来摆脱那个单一维度

标签: matlab matrix multidimensional-array mean netcdf


【解决方案1】:

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

A = npp_data_pft1(1, 1, 33:47, 112:176);
mean(A(:))    % returns scalar value

【讨论】:

  • 来自问题:“我喜欢在时间步 1 中获得平均值”
  • 啊,确实,您实际上提取了时间和区域。
  • 对不起。仅获取区域平均值怎么样,但我们仍将时间步长保持在 1 到 100 之间。
  • 我喜欢获取每个时间步长的特定区域的空间平均值。例如,size(mean_npp_data_pft1) = 100 1 1 1
  • 我们有两种方法,但我得到了完整的结果:x=randi(10,[100 1 10 25]);方法#1:mean_x = nanmean(nanmean(x,3),4);方法#2:M = x(1:100, 1, 1:10, 1:25); mean_x = nanmean(reshape(M,size(M,3)*size(M,4),[]))';
【解决方案2】:

这是诀窍:

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

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

【讨论】:

  • 你可以试试这个方法吗:x=randi(10,[100 1 10 25]); mean_x = nanmean(nanmean(x,3),4);并将结果与​​您的方法进行比较。这两种方法产生不同的结果。
  • 你说得对,我对重塑不够小心,现在尺寸是正确的。 (请参阅 [],size(...) 而不是 size(..),[])。两者的输出都将具有正确的尺寸,但一个将重塑来自不同帧的同一行的值,而不是单个帧的数组......
  • 请注意,我的答案和@Luis Mendo 之间仍然存在浮点精度差异。显然,如果你的意思是一个向量,而不是一个相同元素数组的平均值的两倍,那么答案就会消失。例如尝试a=rand(1000);b=mean(a(:))-mean(mean(a))
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 2018-12-02
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2012-05-06
    • 2014-03-16
    相关资源
    最近更新 更多