私の質問: SOに関するMatlabの質問に対する多くの良い回答がこの関数を頻繁に使用していることに気付きましたbsxfun
。どうして?
動機:のMatlabドキュメントでbsxfun
は、次の例が提供されています。
A = magic(5);
A = bsxfun(@minus, A, mean(A))
もちろん、次のコマンドを使用して同じ操作を実行できます。
A = A - (ones(size(A, 1), 1) * mean(A));
そして実際、簡単な速度テストは、2番目の方法が約20%速いことを示しています。では、なぜ最初の方法を使用するのでしょうか。使用bsxfun
が「手動」アプローチよりもはるかに高速になる状況がいくつかあると思います。私はそのような状況の例とそれがなぜより速いのかについての説明を見ることに本当に興味があります。
また、この質問の最後の要素の1つである、Matlabのドキュメントのbsxfun
「C = bsxfun(fun、A、B)」は、関数ハンドルfunで指定された要素ごとのバイナリ演算を配列AおよびBにシングルトンで適用します。拡張が有効です。」「シングルトン拡張が有効になっている」とはどういう意味ですか?
timeit
はあなた/ angainor / Danが提供するリンクの機能について読むことでこれについて学びました。
tic...toc
行を囲んだ場合、コードの速度は関数をメモリに読み込む必要があるかどうかに依存します。