开发者社区 问答 正文

在Matlab中,何时最佳使用bsxfun?

我的问题:我注意到,关于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

展开
收起
保持可爱mmm 2020-02-07 01:13:50 449 分享 版权
1 条回答
写回答
取消 提交回答
  • 就我而言,我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更少,并且编程速度更快。

    而且,它更短,从而提高了打字速度和可读性。

    2020-02-07 01:14:17
    赞同 展开评论
问答标签:
问答地址: