Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 从矩阵中减去每个向量元素的有效方法_Performance_Matlab_Matrix_Bsxfun - Fatal编程技术网

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