簡體   English   中英

Matlab:arrayfun,cellfun,spfun和structfun與簡單的for循環

[英]Matlab: arrayfun, cellfun, spfun and structfun vs. simple for-loop

哪一個更好,使用所有*fun函數( arrayfuncellfunstructfunspfun )或只使用for循環?

在代碼的可讀性方面,哪種方法可以提供更好的性能,哪種方法應該被認為是更好的實踐?

這真的取決於你所謂的'性能':)

如果你的意思是最短的執行時間 ,那么,有時*fun更快(例如, cellfun('isempty', ...); (是的,字符串參數!)肯定勝過循環版本)。 有時循環更快。 如果您使用的是Matlab版本<2006,請默認使用*fun功能。 如果您處於最新狀態,請默認選擇循環。 您仍然需要進行分析以找出哪一個更快。

正如Amro所指出的,如果你有一個能夠進行FP算術的GPU,以及支持GpGPU的最新版本的Matlab,那么對於用於gpuArray輸入的arrayfun的調用將被大規模並行化。 但是,沒有關於執行時間的一般性陳述; 對於較小的陣列,或者絕對是幽默的陣列,將所有內容復制到GPU上的開銷可能會取消並行計算的任何好處,因此......分析確實是唯一可以確定的方法。

如果你的意思是最小的編碼時間,那么我認為只要操作很簡單,就可以通過*fun來編碼更快。 對於任何復雜的事情,通常更好的是循環。

如果您的意思是最佳可讀性 ,從而在專業環境中維護和實施變更所需的最短時間 ,那么請務必進行循環。

在這個時間點,你的問題並沒有一個明確的簡單答案:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM