2013-04-22 12 views
9

basit vs arrayfun, cellfun, spfun ve structfun?Matlab: For döngüsü bir bütün <code>*fun</code> fonksiyonları (<code>arrayfun</code>, <code>cellfun</code>, <code>structfun</code> ve <code>spfun</code>) veya basitçe <code>for</code> döngü kullanarak kullanarak daha iyidir

Hangi yöntem daha iyi performans sağlar ve kodun okunabilirliği açısından hangi yöntemlerin daha iyi bir uygulama olarak görülmesi gerekir?

+4

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

+2

ayrıca ilgili [cevap] (http://stackoverflow.com/a/15181321/1714410) – Shai

+0

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

cevap

16

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 konular