Mi pregunta: Me he dado cuenta de que muchas buenas respuestas a las preguntas de Matlab sobre SO utilizan con frecuencia la función bsxfun
. ¿Por qué?
Motivación: en la documentación de Matlab para bsxfun
, se proporciona el siguiente ejemplo:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Por supuesto, podríamos hacer la misma operación usando:
A = A - (ones(size(A, 1), 1) * mean(A));
Y, de hecho, una simple prueba de velocidad demuestra que el segundo método es aproximadamente un 20% más rápido. Entonces, ¿por qué usar el primer método? Supongo que hay algunas circunstancias en las que el uso bsxfun
será mucho más rápido que el enfoque "manual". Me interesaría mucho ver un ejemplo de tal situación y una explicación de por qué es más rápido.
Además, un elemento final para esta pregunta, nuevamente de la documentación de Matlab para bsxfun
: "C = bsxfun (fun, A, B) aplica la operación binaria elemento por elemento especificada por la función de diversión de manejo a las matrices A y B, con singleton expansión habilitada ". ¿Qué significa la frase "con la expansión singleton habilitada"?
timeit
función en el enlace que usted / angainor / Dan proporciona.
tic...toc
las líneas, la velocidad del código dependerá de tener que leer las funciones en la memoria.