To naprawdę zależy od tego, co nazywamy „wydajność” :)
Jeśli masz na myśli minimalny czas realizacji dobrze, czasami *fun
są szybsze (na przykład cellfun('isempty', ...);
(tak, string argumentem!) Na pewno bije wersja pętli). Czasami pętla jest szybsza. Jeśli korzystasz z wersji Matlab < 2006, wybierz domyślnie funkcje *fun
. Jeśli korzystasz z czegoś bardziej aktualnego, przejdź do pętli domyślnie. Nadal będziesz musiał profilować, aby dowiedzieć się, który z nich jest szybszy.
Jak zauważył Amro, jeśli masz procesor graficzny zdolny FP arytmetyki oraz najnowszą wersję Matlab, który obsługuje GPGPU, a następnie wezwanie do arrayfun
dla gpuArray
wejść będą masowo-parallelized. Jednak nie można sformułować ogólnych stwierdzeń dotyczących czasu wykonania; w przypadku mniejszych tablic lub absolutnie pełnych humoru, narzut kopiowania wszystkiego na GPU może cofnąć jakąkolwiek korzyść z równoległego obliczania, więc ... profilowanie jest naprawdę jedynym sposobem, aby wiedzieć na pewno.
Jeśli masz na myśli minimalne kodowanie czasu, to powiedziałbym, że zazwyczaj szybciej koduje się pod względem *fun
, o ile operacje są proste. Dla wszystkiego złożonego zazwyczaj lepiej jest przejść do pętli.
Jeśli masz na myśli optymalną czytelność a zatem minimalny czas potrzebny na utrzymanie i wdrażanie zmian w kontekście zawodowym, na pewno, przejdź do pętli.
W tym momencie w czasie, tam naprawdę nie jest jednoznaczne, proste odpowiedzi na swoje pytanie :)
Podobne zapytania: [arrayfun może być znacznie wolniejszy niż wyraźnego pętli w Matlab. Dlaczego?] (Http://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-existicit-loop-in-matlab-why) –
również powiązane [odpowiedź] (http: // /stackoverflow.com/a/15181321/1714410) – Shai
Powiedziałbym, że to zależy w dużej mierze od tego, z której wersji MATLAB korzystasz. W moim przypadku MATLAB R2012a, używam prawie wyłącznie pętli "for" – fpe