从矩阵中减去每个向量元素的有效方法



我有一个函数f,它应该给我一个矩阵,其中x是从m 中逐元素减去的

m = ones(4);
f = @(x) m-x;

当我用调用这个函数时

f(5)

一切都很好。

但是我怎么能用矢量调用这个函数呢

f([5,7])

所以我得到

-4    -4    -4    -4
-4    -4    -4    -4
-4    -4    -4    -4
-4    -4    -4    -4

-6    -6    -6    -6
-6    -6    -6    -6
-6    -6    -6    -6
-6    -6    -6    -6

类似于三维矩阵。

如果可能的话,我正在寻找最有效的方法,所以我不想使用循环。

谢谢你的帮助!

您不需要为此定义函数。只需将矢量移动到第三个维度并使用bsxfun:

m = ones(4);
v = [5 7];
bsxfun(@minus, m, shiftdim(v(:),-2))

要添加到Luis Mendo接受的答案中,您可以使用permute重新排列向量的维度,如果这比shiftdim:更直观的话

v = [5 7];
bsxfun(@minus, m, permute(v,[3 1 2])) % 4x4x1 @minus 1x1x2 => 4x4x2

使用bsxfun,这一切都是为了对齐非单例维度。请注意,当进行负(右)有效偏移时,您也可以像使用reshape(v,[1,1,size(v)])一样使用reshape从1x2偏移到1x1x2。

相关内容

  • 没有找到相关文章

最新更新