我有一个函数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
和
{{1}}
类似于三维矩阵。
如果可能的话,我正在寻找最有效的方法,所以我不想使用循环。
感谢您的帮助!
答案 0 :(得分:3)
您无需为此定义函数。只需将矢量移至第三维,然后使用bsxfun
:
m = ones(4);
v = [5 7];
bsxfun(@minus, m, shiftdim(v(:),-2))
答案 1 :(得分:2)
要添加到Luis Mendo接受的答案,您可以使用permute
重新排列向量的维度,如果这比shiftdim
更直观:
v = [5 7];
bsxfun(@minus, m, permute(v,[3 1 2])) % 4x4x1 @minus 1x1x2 => 4x4x2
使用bsxfun
,所有关于对齐非单例维度。请注意,在执行负(右)有效转换时,您还可以使用reshape
之类的reshape(v,[1,1,size(v)])
从1x2转换为1x1x1x2。