保持细胞的特定子细胞应用cellfun

时间:2014-08-08 18:40:49

标签: matlab

我有这个单元格:

c = { {'c1_str1','c1_str2'},{'c2_str1','c2_str2','c2_str3','c2_str4'}, {'c3_str1','c3_str2'}

我希望过滤c以获取cc单元格:

cc = {'c1_str2', 'c2_str2','c2_str3','c2_str4', 'c3_str2'} 

换句话说,我希望每个子单元格c保留除第一个之外的所有元素。

我试过了:

cc = cellfun(@(x)[x{2:end}],c,'UniformOutput',0);
cc = cellfun(@(x)[x(2:end)],c,'UniformOutput',0); 

但没有成功。因为c足够大,你能否请某人提出建议我们如何使用cellfun避免循环实现呢?

cc = {};
for i = 1:numel(c)
    cc= [cc c{i}(2:end)]; 
end

谢谢!

PS:任何将子单元保持在任意位置(例如第一个第二个和第五个子单元)的建议都会非常有趣。

1 个答案:

答案 0 :(得分:3)

你几乎拥有它:

cc = cellfun(@(x) x(2:end),c,'UniformOutput',0);
cc = [cc{:}]

任意版本有点棘手:

idx = [1,2,5]

cc = cellfun( @(x)  x( idx(idx<=numel(c)) ),c,'uni',0 )
cc = [cc{:}]