我的问题:我注意到,关于SO的Matlab问题的很多很好的答案经常使用该函数bsxfun
。为什么?
动机:在Matlab文档中bsxfun
,提供了以下示例:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
当然,我们可以使用以下方法执行相同的操作:
A = A - (ones(size(A, 1), 1) * mean(A));
实际上,简单的速度测试表明第二种方法的速度提高了约20%。那么为什么要使用第一种方法呢?我猜测在某些情况下使用bsxfun
速度会比“手动”方法快得多。我真的很想看到这种情况的示例,并解释为什么它更快。
同样,这个问题的最后一个元素,同样来自Matlab文档,内容为bsxfun
:“ C = bsxfun(fun,A,B)将函数句柄fun指定的逐个元素的二进制运算应用于数组A和B,且单例扩展已启用。”。短语“启用单例扩展已启用”是什么意思?
timeit
您/ angainor / Dan提供的链接中的函数来了解这一点的。
tic...toc
所有代码放在一起,那么代码的速度将取决于必须将函数读入内存中。