![](/img/trans.png)
[英]Retrieving element index in spfun, cellfun, arrayfun, etc. in MATLAB
[英]Matlab: arrayfun, cellfun, spfun and structfun vs. simple for-loop
哪一個更好,使用所有*fun
函數( arrayfun
, cellfun
, structfun
和spfun
)或只使用for
循環?
在代碼的可讀性方面,哪種方法可以提供更好的性能,哪種方法應該被認為是更好的實踐?
這真的取決於你所謂的'性能':)
如果你的意思是最短的執行時間 ,那么,有時*fun
更快(例如, cellfun('isempty', ...);
(是的,字符串參數!)肯定勝過循環版本)。 有時循環更快。 如果您使用的是Matlab版本<2006,請默認使用*fun
功能。 如果您處於最新狀態,請默認選擇循環。 您仍然需要進行分析以找出哪一個更快。
正如Amro所指出的,如果你有一個能夠進行FP算術的GPU,以及支持GpGPU的最新版本的Matlab,那么對於用於gpuArray
輸入的arrayfun
的調用將被大規模並行化。 但是,沒有關於執行時間的一般性陳述; 對於較小的陣列,或者絕對是幽默的陣列,將所有內容復制到GPU上的開銷可能會取消並行計算的任何好處,因此......分析確實是唯一可以確定的方法。
如果你的意思是最小的編碼時間,那么我認為只要操作很簡單,就可以通過*fun
來編碼更快。 對於任何復雜的事情,通常更好的是循環。
如果您的意思是最佳可讀性 ,從而在專業環境中維護和實施變更所需的最短時間 ,那么請務必進行循環。
在這個時間點,你的問題並沒有一個明確的簡單答案:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.