2010-07-19 49 views
9

我想對單元格數組的每個元素應用一個函數 - 所以我有cellfun。然而,該函數需要兩個額外的參數(一個字符串和一個向量),我希望對單元格數組的所有元素保持不變;即我想這樣做:如何使用常量額外輸入參數應用cellfun(或arrayfun或structfun)?

cellfun(@myfun, cellarray, const1, const2) 

含義:

for i = 1:numel(cellarray), 
    myfun(cellarray{i}, const1, const2); 
end 

是否有某種方式來做到這一點,而無需創建包含const1const2numel(cellarray)副本中間單元陣列?

回答

16

您可以使用anonymous function調用myfun有兩個額外的參數做到這一點:

cellfun(@(x) myfun(x,const1,const2), cellarray) 
+0

目前我正在使用此解決方案,但還有其他嗎?對於大型數組,它可能會產生大量的開銷。是唯一可以創建'const1,const2'副本的數組(不是一個好的替代)? – embert 2014-09-20 08:11:48

+1

@embert我不知道額外的開銷會來自哪裏,但也許你可以使用分析器來查明。我也會在問題中試用for循環替代方法,因爲for循環不會導致他們在MATLAB中使用過的那種懲罰(有時它們甚至是最快的選擇)。 – gnovice 2014-09-20 19:52:12

4

另一個竅門是在指數使用ARRAYFUN:

arrayfun(@(k) myfun(cellarray{k},const1,const2), 1:numel(cellarray)) 

如果myfun返回值不是標量,您可能需要設置'UniformOutput',false選項。