2015-03-25 22 views
1

我是matlab新手。我有這樣的代碼是這樣的:關於arrayfun在matlab中的一個例子

names=arrayfun(@num2str, 1:nseq_all, 'unif', 0); 

搜索後,我明白,arrayfun應用函數的每個元素的數組。所以,我猜在這種情況下,我們將num2str函數應用到數組1的每個元素:nseq_all。 'unif'和0是函數的參數和相應的值部分。我很難理解這部分。任何意見,不勝感激。

回答

3

'unif',0'UniformOutput',false的簡寫,表示輸出的尺寸與輸入數組1:nseq_all不一樣。

這是因爲字符串1尺寸爲1x1,但124的尺寸爲1x3。

names將是一個單元格數組,因爲正常的數值數組不能包含具有不同數量元素的行/列。

請務必仔細閱讀arrayfun documentation

1

'unif', 0'UniformOutput',false的簡寫。請注意,Matlab中的parameterName/parameterValue對允許parameterName的縮寫,只要它不與另一個可能的參數衝突。在這種情況下,'un',0也可以工作。無論如何,這是什麼選擇?

modifiedArray = arrayfun(function_handle, array)

應用於function_handle定義的函數的每個array元素,並返回modifiedArray,這是相同的尺寸array,並且類任何function_handle回報。 只有在function_handle的輸出爲標量時才能使用此語法,儘管級別無關緊要,所以function_handle的輸出可以是標量結構,即arrayfun(@(x)struct('field',x),magic(4))有效。

cellArray = arrayfun(function_handle, array, 'UniformOutput', false)

應用於function_handle定義的函數的每個array元素,並返回cellArray,這是大小相同arraycellArray的每個元素都包含呼叫function_handle的輸出。 如果function_handle的輸出爲非標量(即使每個計算返回1乘2的數組,這是完全一致的),但是當然,您可以將其與標量輸出一起使用,如果使用此語法必須作爲標量輸出好。

在你的情況,num2str返回一個字符數組,其是非標如果num2str這種觀點認爲上述9。因此,你需要設置UniformOutputfalse