MATLAB:简单的cellfun不适用于字符串向量

时间:2015-02-10 15:19:19

标签: matlab

我构建了我的矢量:

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

我只是想拍摄前2个字符,我写了一个简单的cellfun,如下所示:

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

然而,它说:

error: cellfun: C must be a cell array

我应该如何提取每个字符串的前2个字符?

1 个答案:

答案 0 :(得分: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);

如果您想取消 - 单元格数组,请使用cell2mat

Aout = cell2mat(A);

我质疑上述效率。如果您只想提取单元格数组的前两个字符然后将其转回字符数组,为什么不简单地索引所有行的前两列原始字符数组?使用cellfun会增加不必要的开销,因为简单的索引可以解决问题。在这种情况下,索引比使用cellfun更具可读性,后者增加了一层模糊处理。

Aout = v(:,1:2);