我的问题:我注意到,关于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,具有单例扩展已启用。”。短语“启用单例扩展”是什么意思? 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
就我而言,我bsxfun之所以使用它是因为它避免了我考虑列或行问题。
为了编写您的示例:
A = A - (ones(size(A, 1), 1) * mean(A)); 我必须解决几个问题:
1)size(A,1)或size(A,2)
2)ones(sizes(A,1),1)或ones(1,sizes(A,1))
3)ones(size(A, 1), 1) * mean(A)或mean(A)*ones(size(A, 1), 1)
4)mean(A)或mean(A,2)
使用时bsxfun,我只需要解决最后一个问题:
a)mean(A)或mean(A,2)
您可能会认为这是懒惰之类的东西,但是当我使用它时bsxfun,我的bug更少,并且编程速度更快。
而且,它更短,从而提高了打字速度和可读性。