En Matlab, ¿cuándo es óptimo usar bsxfun?

Mi pregunta: Me he dado cuenta de que muchas de las respuestas a las preguntas de Matlab sobre SO utilizan la función con frecuencia.bsxfun. ¿Por qué?

Motivación: En la documentación de Matlab parabsxfun, 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 se usabsxfun 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.

También, un elemento final a esta pregunta, nuevamente de la documentación de Matlab parabsxfun: "C = bsxfun (fun, A, B) aplica la operación binaria elemento-por-elemento especificada por la función handle fun a los arreglos A y B, con la expansión de singleton habilitada.". ¿Qué significa la frase "con la expansión de singleton habilitada"?

Respuestas a la pregunta(5)

Su respuesta a la pregunta