¿Es bsxfun realmente aplicado de forma inteligente?

Supongamos que tengo la siguiente función:

function x = printAndKeepX(x, y)
    x
    y
end

y yo invocobsxfun al igual que:

bsxfun(@printAndKeepX, 1:4, 1);

Fueronbsxfun Realmente elemento por elemento, esperaríaprintAndKeepX Ser llamado 4 veces, con los argumentos.(x, y) siendo(1, 1), (2, 1), (3, 1) y(4, 1), respectivamente. Pero la salida muestra que se llama una sola vez con(x, y) siendo([1 2 3 4], 1):

x =
     1     2     3     4

y =
     1

¿Por qué? ¿Cómo puedo saber lo que se considera un "elemento"?

Editar:
La documentación sugiere que a veces la función llamada puede recibir dos escalares y, a veces, un vector / matriz y un escalar. ¿Puedo saber con seguridad cuál de estos va a suceder?

Estoy interesado en las versiones regular y GPU debsxfun.

Respuestas a la pregunta(1)

Su respuesta a la pregunta