Moje pytanie: Zauważyłem, że wiele dobrych odpowiedzi na pytania Matlab dotyczące SO często korzysta z tej funkcji bsxfun
. Czemu?
Motywacja: w dokumentacji Matlab dla bsxfun
podano następujący przykład:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Oczywiście moglibyśmy wykonać tę samą operację używając:
A = A - (ones(size(A, 1), 1) * mean(A));
W rzeczywistości prosty test szybkości pokazuje, że druga metoda jest o około 20% szybsza. Dlaczego więc używać pierwszej metody? Domyślam się, że istnieją okoliczności, w których używanie bsxfun
będzie znacznie szybsze niż podejście „ręczne”. Bardzo chciałbym zobaczyć przykład takiej sytuacji i wyjaśnienie, dlaczego jest szybszy.
Również ostatni element tego pytania, ponownie z dokumentacji Matlab dla bsxfun
: "C = bsxfun (fun, A, B) stosuje binarną operację element po elemencie określoną przez funkcję handle fun do tablic A i B, z singletonem rozszerzenie włączone. ”. Co oznacza wyrażenie „z włączonym rozwijaniem singletona”?
timeit
funkcji w linku, który podajesz / angainor / Dan.
tic...toc
wokół linii, szybkość kodu będzie zależeć od konieczności wczytywania funkcji do pamięci.