No Matlab, quando é ideal usar o bsxfun?
Minha pergunta: Tenho notado que muitas das boas respostas às perguntas do Matlab sobre SO freqüentemente usam a funçãobsxfun
. Por quê?
Motivação: Na documentação do Matlab parabsxfun
, o seguinte exemplo é fornecido:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Claro que poderíamos fazer a mesma operação usando:
A = A - (ones(size(A, 1), 1) * mean(A));
E, de fato, um teste de velocidade simples demonstra que o segundo método é cerca de 20% mais rápido. Então, por que usar o primeiro método? Eu estou supondo que existem algumas circunstâncias em que o usobsxfun
será muito mais rápido que a abordagem "manual". Eu estaria realmente interessado em ver um exemplo de tal situação e uma explicação de porque é mais rápido.
Além disso, um elemento final para esta questão, novamente a partir da documentação do Matlab parabsxfun
: "C = bsxfun (fun, A, B) aplica a operação binária de elemento-a-elemento especificada pelo funil de manuseio da função em matrizes A e B, com expansão de singleton ativada.". O que significa a frase "com expansão de singleton habilitado"?