2015-02-10 73 views
0

我構建了我的矢量這樣:MATLAB:簡單cellfun不上串矢量工作

v = ['asdf'; 'qwer'; 'zxcv']; 

我只是想取前2個字符,我寫了一個簡單cellfun像這樣:

A = cellfun(@(x) x(1:2), v, 'UniformOutput', false); 

然而,它說:

error: cellfun: C must be a cell array 

我應該如何提取每個字符串的第2個字符?

回答

3

那是因爲v而不是單元陣列。把它變成一個:

v = {'asdf'; 'qwer'; 'zxcv'}; 

如果您不能使用電池陣列,做什麼Divakar建議,並通過使用cellstrv成一個:

v = ['asdf', 'qwer', 'zxcv']; 
v_cell = cellstr(v); 

如果你想逃避的臨時變量,供應與v直接呼叫到cellfun

A = cellfun(@(x) x(1:2), cellstr(v), 'UniformOutput', false); 

如果你想聯合國 -cell單元陣列,使用cell2mat

Aout = cell2mat(A); 

我雖然質疑以上的效率。如果你只是想提取單元格數組的前兩個字符然後將其重新轉換爲字符數組,爲什麼不簡單地索引原始字符數組中所有行的前兩列?使用cellfun增加了不必要的開銷,當簡單的索引可以做到這一點。在這種情況下,索引編制比使用cellfun更具可讀性,它增加了一層模糊處理。

Aout = v(:,1:2); 
+0

我不能將它變成單元陣列。矢量v必須保持原樣。有另一種方法嗎? – Mariska 2015-02-10 15:22:16

+0

@Mariska嘗試'v_cell = cellstr(v)',然後在'cellfun'調用中使用'v_cell'。 – Divakar 2015-02-10 15:22:50

+0

@Mariska - 那麼如果你不能使用單元陣列,那麼你爲什麼要使用'cellfun'?是的,按照Divakar的說法並使用'cellstr'。 – rayryeng 2015-02-10 15:23:08