Matlab 从三维阵列中减去矢量

Matlab 从三维阵列中减去矢量,matlab,Matlab,假设我有一个3d阵列: lat = 45:49; lon = -116:-110; b = rand(5,7,12); 其中第一个维度表示纬度,第二个维度表示经度,第三行表示数据。我的目标是使用mapping工具箱在地图上绘制这些3d数据。但是,在进行此操作之前,我想找出“b”中的数据与以下向量之间的差异: vals = [2.3,5,6.8,5.4,3.3,12,1.5,4.6,9.8,82,3.3,1]; 具体来说,对于映射数据中的每个空间数据点,我希望计算该向量与b中每个点的数据之间的

假设我有一个3d阵列:

lat = 45:49;
lon = -116:-110;
b = rand(5,7,12);
其中第一个维度表示纬度,第二个维度表示经度,第三行表示数据。我的目标是使用mapping工具箱在地图上绘制这些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中实现这一点吗

由于MATLAB不支持,您需要创建一个与
b
大小相同的矩阵,重复使用
vals
的值。要做到这一点,首先需要将
VAL
更改为
1x12
的形状,然后重复
5x7
次。你可以用它来做

values=repmat(permute(vals,[1 3 2]),[5 7 1]);
现在你可以

mae = mean(abs(bv - values))

由于MATLAB不支持,您需要创建一个与
b
大小相同的矩阵,其重复值为
vals
。要做到这一点,首先需要将
VAL
更改为
1x12
的形状,然后重复
5x7
次。你可以用它来做

values=repmat(permute(vals,[1 3 2]),[5 7 1]);
现在你可以

mae = mean(abs(bv - values))

由于MATLAB不支持,您需要创建一个与
b
大小相同的矩阵,其重复值为
vals
。要做到这一点,首先需要将
VAL
更改为
1x12
的形状,然后重复
5x7
次。你可以用它来做

values=repmat(permute(vals,[1 3 2]),[5 7 1]);
现在你可以

mae = mean(abs(bv - values))

由于MATLAB不支持,您需要创建一个与
b
大小相同的矩阵,其重复值为
vals
。要做到这一点,首先需要将
VAL
更改为
1x12
的形状,然后重复
5x7
次。你可以用它来做

values=repmat(permute(vals,[1 3 2]),[5 7 1]);
现在你可以

mae = mean(abs(bv - values))

为此使用
bsxfun
(它比
repmat
更有效):


为此使用
bsxfun
(它比
repmat
更有效):


为此使用
bsxfun
(它比
repmat
更有效):


为此使用
bsxfun
(它比
repmat
更有效):


bsxfun
是在Matlab中实现广播的一种更有效的方法:@Dan确实是!我只是不习惯,我希望Divakar会回答:P
bsxfun
是在Matlab中实现广播的一种更有效的方法:@Dan确实是!我只是不习惯,我希望Divakar会回答:P
bsxfun
是在Matlab中实现广播的一种更有效的方法:@Dan确实是!我只是不习惯,我希望Divakar会回答:P
bsxfun
是在Matlab中实现广播的一种更有效的方法:@Dan确实是!我只是不习惯,我希望迪瓦卡会回答:P