2013-04-22 19 views
9

co jest lepsze, wykorzystując wszystkie *fun funkcje (arrayfun, cellfun, structfun i spfun) lub po prostu za pomocą for pętlę?Matlab: arrayfun, cellfun, spfun i structfun vs. proste dla pętli

Jaka metoda zapewnia lepszą wydajność i jakie metody należy uznać za lepszą praktykę pod względem czytelności kodu?

+4

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) –

+2

również powiązane [odpowiedź] (http: // /stackoverflow.com/a/15181321/1714410) – Shai

+0

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

Odpowiedz

16

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 :)