Ma question: J'ai remarqué que beaucoup de bonnes réponses aux questions Matlab sur SO utilisent fréquemment la fonction bsxfun
. Pourquoi?
Motivation: Dans la documentation Matlab pour bsxfun
, l'exemple suivant est fourni:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Bien sûr, nous pourrions faire la même opération en utilisant:
A = A - (ones(size(A, 1), 1) * mean(A));
Et en fait, un simple test de vitesse démontre que la deuxième méthode est environ 20% plus rapide. Alors pourquoi utiliser la première méthode? Je suppose qu'il y a des circonstances où l'utilisation bsxfun
sera beaucoup plus rapide que l'approche "manuelle". Je serais vraiment intéressé de voir un exemple d'une telle situation et une explication pour expliquer pourquoi c'est plus rapide.
Aussi, un dernier élément à cette question, toujours de la documentation Matlab pour bsxfun
: "C = bsxfun (fun, A, B) applique l'opération binaire élément par élément spécifiée par la fonction handle fun aux tableaux A et B, avec singleton extension activée. ". Que signifie l'expression «avec l'expansion singleton activée»?
timeit
fonction dans le lien que vous / angainor / Dan fournissez.
tic...toc
les lignes autour, la vitesse du code dépendra de la nécessité de lire les fonctions en mémoire.