Мой вопрос: я заметил, что многие хорошие ответы на вопросы 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 (fun, A, B) применяет двоичную операцию поэлементно, указанную функцией handle функции, к массивам A и B с помощью singleton расширение включено. Что означает фраза «с включенным расширением синглтона»?
timeit
функции в ссылке, которую вы / angainor / Dan предоставили.
tic...toc
его в строки, скорость кода будет зависеть от необходимости читать функции в памяти.