¿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
.