Kiedy zacząłem pracować z Matlabem jakiś czas temu na uniwersytecie, mój przełożony zabiłby mnie, gdyby zobaczył niepotrzebną pętlę for (poprosiłby o jej wymianę na kron
lub jakikolwiek sposób manipulacji indeksami, jak to możliwe). Później starałem się unikać jak najwięcej pętli matlab, szukając najciemniejszych sposobów kodowania matlabów, by zrobić czarną magię zamiast prostej pętli.Cellfun versus Simple Matlab Loop performance
I pewnego dnia odkryłem cellfun
, co czyniło czarną magię dość prostsze, mogę zmienić wiele pętle pracy z komórkami i cellfun
combo, ale pewnego dnia widziałem jeden post about cellfun który mnie pytanie, czy mój dziedziczone znajomość Matlab była prawda , to jest: że pętle matlab zawsze będą wolniejsze niż jedna wbudowana funkcja kompilowana, co było czymś, co miałem tyle wiary. Przetestowałem to w jednej z moich implementacji i faktycznie, pętla byłaby szybsza! Byłem jak OMG, przez te wszystkie dni robiąc niewyraźny kod marnowany na nic hahaha. Od tego czasu przestałem ciężko pracować, aby spróbować zoptymalizować kod matlab, zwykle zależy to od każdego przypadku i tak dalej.
Dzisiaj I saw this answer, który zapamiętał mój wysiłek, aby omijać jak najwięcej pętli matlabowych (nie wiem, czy to był autor, którego należy unikać do wykonania, ale w każdym razie to przypomniało wszystkie te działanie z pętlą matlab). I jedno pytanie przyszło mi do głowy: Czy celofonia jest lepsza niż w przypadku pętli? Kiedy to będzie prawda?
Co do mojej odpowiedzi, o której wspomniałeś: tak, staram się unikać pętli 'for', jak to robisz (lub robiłeś), a moją motywacją jest wydajność. Myślę (lub zwykł myśleć?), Że pętle 'for' są zwykle wolniejsze i należy ich unikać. –
Najwyraźniej "cela" jest wolniejsza, z wyjątkiem szczególnych przypadków. Zobacz http://www.mathworks.com/matlabcentral/answers/42335 i http: //www.mathworks.com/matlabcentral/newsreader/view_thread/301894 –
@LuisMendo Tak, dokładnie! Ale niestety 'cellfun' z anonimowym uchwytem funkcji jest zwykle wolniejszy niż pętli' for' ... to by mnie tak nudziło za wysiłek za nic. Dzięki za referencje. – Werner