【发布时间】:2013-05-13 07:31:37
【问题描述】:
我想在 Matlab 中计算示踪剂字段的平均值,但构成该字段的单元格大小不同。例如,我的跟踪器字段是:
T =
1 3 5 8
2 1 4 3
2 1 9 1
20 8 3 1
我还有 2 个字段,dx 和 dy,它们描述了构成 T 的单元格的大小。
dx =
1 1 2 3
1 1 2 3
1 1 2 3
1 1 2 3
和
dy =
3 3 3 3
3 3 3 3
2 2 2 2
1 1 1 1
所以,直观地说,dx 和 dy 告诉我,跟踪器字段 T 的左下角对计算 T 的平均值的贡献最小,而右上角角应该有最大的贡献。
我最初尝试mean(mean(T)),但这显然超过了T等左下角的重要性。经过一番调查,我想我会彻底并手动计算平均值,包括权重,使用这样的东西:
T_mean_i = sum(T*dx)./sum(dx)
与dy 类似,y 方向的单元格宽度。但是,我不确定如何实现这一点。
编辑:这是我的问题的更多细节。
我的网格是 260*380 单元格,所以size(dy) = size(dx) = 260-by-380。示踪剂场的计算方法是将表面通量场(例如sflux)除以类似大小的盐度场salt。所以,size(sflux) = size(salt) = 260-by-380-by-1000,其中时间维度的长度为1000。
我想找到sflux(:,:)./salt(:,:,ii) 包括单元格宽度字段的权重,dx 和 dy,在每个时间步 ii。 (我不会使用 for 循环来做到这一点,别担心!!)
我正在做的事情是否在正确的轨道上?还是我想错了?请随时要求澄清。
干杯!
【问题讨论】:
-
每个元素的重量:是
dx和dy在各自位置的product,还是sum? -
嗯,
dy.*dy是每个单元格的面积。因此,据我所知,每个单元格的面积决定了应该为平均值赋予的权重。我唯一担心的是结果是否正确标准化... -
感谢您的超级快速回答...我避免使用
(:),因为该字段实际上是 3-d(第三个暗淡。代表时间)。所以,我想在每个时间步计算均值。使用(:)将意味着所有时间。