Quando ho iniziato a lavorare con Matlab qualche tempo fa nell'università, il mio supervisore mi uccideva se vedeva un ciclo non necessario (chiedeva di scambiarlo per kron
o qualsiasi tipo di manipolazione degli indici possibile). Più tardi, stavo cercando di evitare il più possibile ogni ciclo su MATLAB, cercando i modi di codifica matlab più scuri per fare magia nera invece di un semplice ciclo.Cellfun contro Simple Matlab Loop performance
E un giorno ho scoperto il cellfun
, che ha reso la magia nera del tutto più semplice, ho potuto cambiare molte cicli di lavoro con le cellule e cellfun
combo, ma un giorno ho visto uno post about cellfun che mi ha fatto domanda se la mia conoscenza MATLAB ereditato era vero , ovvero: che i loop matlab sarebbero sempre più lenti di una funzione compilata incorporata, che era una cosa di cui avevo tanta fiducia. L'ho provato in una delle mie implementazioni e infatti il ciclo per il ciclo sarebbe stato più veloce! Ero tipo, OMG, tutti quei giorni facendo codice oscuro sprecato per niente hahaha. Da quel giorno, ho smesso di lavorare così duramente per cercare di ottimizzare il codice matlab, normalmente dipende da ogni caso e così via.
Oggi I saw this answer, che ha ricordato il mio impegno per evitare il maggior numero possibile di loop matlab (non so se è stato l'autore ad evitare per le prestazioni, ma comunque ha ricordato tutto questo matlab performance del ciclo). E una domanda mi è venuta in mente: Cellfun è migliore di quello dei loop? Quando sarebbe vero?
Per quanto riguarda la mia risposta che hai menzionato: sì, cerco di evitare cicli 'for', come fai tu (o facevi), e la mia motivazione è la performance. Penso (o era solito pensare?) È vero che i cicli "for" sono di solito più lenti e dovrebbero essere evitati. –
Apparentemente 'cellfun' è più lento tranne che in casi speciali. Vedere http://www.mathworks.com/matlabcentral/answers/42335 e http: //www.mathworks.com/matlabcentral/newsreader/view_thread/301894 –
@LuisMendo Sì, esattamente! Ma sfortunatamente 'cellfun' con le funzioni anonime gestite sono di solito più lente dei cicli' for' ... questo mi renderebbe così annoiato dallo sforzo per nulla. Grazie per i riferimenti. – Werner