Я заметил, что многие хорошие ответы на вопросы 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, с одиночным элементом расширение включено .. Что означает фраза с включенным одноэлементным расширением?
tic...toc
вокруг строк, скорость кода будет зависеть от необходимости считывать функции в память. - person Jonas   schedule 18.10.2012timeit
в ссылке, которую вы / angainor / Dan предоставили. - person Colin T Bowers   schedule 19.10.2012