Bu gerçekten 'performans' :) Eğer demek istediğin
asgari yürütme zamanı dediğimiz bağlıdır, iyi, bazen *fun
hızlı (örneğin, cellfun('isempty', ...);
(evet, dize argümanı vardır!) Emin atım için döngü sürümü). Bazen bir döngü daha hızlıdır. Matlab sürüm < 2006 üzerindeyseniz, varsayılan olarak *fun
işlevlerine gidin. Daha yeni bir şey kullanıyorsanız, varsayılan olarak döngülere gidin. Hangisinin daha hızlı olduğunu öğrenmek için her zaman profiliniz olmalı.
Eğer FP aritmetik işlemleri yapabilen bir GPU ve GPGPU desteği Matlab'in son sürümü varsa, Amro tarafından belirtildiği gibi
ardından gpuArray
girişler için arrayfun
bir çağrı kitlesel-parallelized olacaktır. Ancak, yürütme süresine ilişkin genel bir ifade alınamaz; Daha küçük diziler ya da tamamen hummalı olanlar için, her şeyi GPU'ya kopyalamanın yükü, hesaplamaları paralelleştirmenin herhangi bir faydasını geri alabilir, bu yüzden ... profilleme, gerçekten kesin olarak bilmenin tek yoludur.
minimum kodlamasını kodlaması ile ifade ediyorsanız, işlemlerin basit olması koşuluyla genellikle *fun
açısından kodlamanın daha hızlı olduğunu söyleyebilirim. Karmaşık bir şey için genellikle döngü için gitmek daha iyidir. Eğer kesin Optimum okunabilirliği ve profesyonel bağlamda değişikliklerin bakım ve uygulanması için gerekli böylece minimum süreyi, kastediyorsan
, döngü için gidin. zaman içinde bu noktada
, gerçekten sorunuzun :) için açık seçik basit bir cevabı orada değil
İlgili soru: [arrayfun Matlab'de açık bir döngü önemli ölçüde yavaş olabilir. Neden?] (Http://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why) –
ayrıca ilgili [cevap] (http://stackoverflow.com/a/15181321/1714410) – Shai
Bunun, MATLAB'ın hangi sürümlerde yayınlandığına bağlı olduğunu söyleyebilirim. Benim durumumda, MATLAB R2012a, neredeyse sadece '' '' döngülerden yararlanıyorum – fpe