Performance 从矩阵中减去每个向量元素的有效方法
我有一个函数Performance 从矩阵中减去每个向量元素的有效方法,performance,matlab,matrix,bsxfun,Performance,Matlab,Matrix,Bsxfun,我有一个函数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 及 在三维矩阵中 如果可能的话,我正在寻找最有效的方法,所以我不想使用循环 谢谢你的帮助 您不需要为此定义函数。只需将向量移动到第
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
及
在三维矩阵中
如果可能的话,我正在寻找最有效的方法,所以我不想使用循环
谢谢你的帮助 您不需要为此定义函数。只需将向量移动到第三维并使用:
要补充Luis Mendo的公认答案,您可以使用重新排列向量的维度,如果这比
shiftim
更直观:
v = [5 7];
bsxfun(@minus, m, permute(v,[3 1 2])) % 4x4x1 @minus 1x1x2 => 4x4x2
使用
bsxfun
,所有这些都是关于对齐非单例维度的。请注意,在进行负(右)有效移位时,您也可以使用重塑
像重塑(v[1,1,大小(v)])
从1x2移位到1x1x2。使其看起来简单。为了完整性,我添加了一个permute
变体……这就是我周末的贡献!我打赌这不会是你这个周末的最后一次!
m = ones(4);
v = [5 7];
bsxfun(@minus, m, shiftdim(v(:),-2))
v = [5 7];
bsxfun(@minus, m, permute(v,[3 1 2])) % 4x4x1 @minus 1x1x2 => 4x4x2