Моє запитання: Я помітив, що багато хороших відповідей на запитання Matlab щодо SO часто використовують цю функцію 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 (весело, A, B) застосовує бінарну операцію" елемент за елементом ", визначену функцією обробки fun, до масивів A і B, з синглтон розширення ввімкнено. " Що означає словосполучення "з включеним розширенням однотонних"?
timeit
функцію у посиланні, яке ви / агін / Дан надаєте.
tic...toc
рядки, швидкість коду буде залежати від необхідності читання функцій у пам'яті.