我注意到很多关于堆栈溢出的 MATLAB 问题的好答案经常使用函数 bsxfun
。为什么?
动机: 在 bsxfun
的 MATLAB 文档中提供了以下例子:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
当然,我们也可以使用以下方法进行同样的操作:
A = A - (ones(size(A, 1), 1) * mean(A));
事实上,一个简单的速度测试表明,第二种方法大约快20% 。那么为什么要使用第一种方法呢?我猜想在某些情况下,使用 bsxfun
会比“手动”方法快得多。我真的很有兴趣看到这种情况的一个例子,并解释为什么它更快。
此外,这个问题的最后一个元素,同样来自于 bsxfun
的 MATLAB 文档: “ C = bsxfun (fun,a,b)将函数 handle fun 指定的元素逐个二元运算应用到数组 a 和 b,启用了单例展开。”.“启用单例扩展”是什么意思?