假设我有一个3d数组:
lat = 45:49;
lon = -116:-110;
b = rand(5,7,12);
其中第一个维度表示纬度,第二个维度表示经度,第三个维度表示数据。我的目标是使用映射工具箱在地图上绘制这个3D数据。但是,在这之前,我想找到'b'中的数据与以下向量之间的区别:
vals = [2.3,5,6.8,5.4,3.3,12,1.5,4.6,9.8,82,3.3,1];
具体来说,对于我在映射数据中的每个空间数据点,我都想计算该向量与b中每个点的数据之间的平均绝对误差。如果这是两个法线向量,我会使用:
mae = mean(abs(bv - vals))
但我不确定如何使用3d数组完成此操作。最终,我的目标是映射这个平均绝对误差,看它是如何在空间上变化的。任何人都可以建议如何在matlab中完成这项工作?
答案 0 :(得分:3)
为此使用bsxfun
(效率高于repmat
):
V = permute(vals, [1,3,2]) %// Make sure that the dimesions 'align' correctly. i.e. 12 elements must go in the thrid dimension to match b
mae = mean(abs(bsxfun(@minus, b, V)),3)
答案 1 :(得分:0)
由于MATLAB不支持broadcasting,您需要创建一个与b
大小相同的矩阵,其重复值为vals
。要做到这一点,首先您需要将vals
更改为1x1x12
的形状,然后重复5x7
次。你可以用
values=repmat(permute(vals,[1 3 2]),[5 7 1]);
现在你可以
mae = mean(abs(bv - values))