从3d数组减去矢量

时间:2015-10-12 13:21:09

标签: matlab

假设我有一个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中完成这项工作?

2 个答案:

答案 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))