使用数字字符串快速填充单元格数组

时间:2011-12-20 20:19:49

标签: matlab

我想构建一个字符串的单元格数组:{'x_1', 'x_2', ..., 'x_n'}。我知道n提前是什么。天真的我可能会按如下方式构建这个单元格数组:

for i = 1:n
    myCell{i} = sprintf('x_%d', i);
end

有没有更优雅的方法来做到这一点,即单行?

4 个答案:

答案 0 :(得分:5)

您的代码比提供的一些答案快三倍:

%
n = 1000;
tic
myCell = cell(1,n);
for i = 1:n
    myCell{i} = sprintf('x_%d', i);
end
toc

tic
aCell = arrayfun(@(x){sprintf('x_%d',x)},1:n);
toc

tic
bCell = strcat('x_',cellstr(num2str((1:n)')));
toc

tic
cCell = strcat('x_',strtrim(cellstr(num2str((1:n)'))));
toc



>> Elapsed time is 0.011541 seconds.
>> Elapsed time is 0.030992 seconds.
>> Elapsed time is 0.027931 seconds.
>> Elapsed time is 0.030453 seconds.

答案 1 :(得分:1)

首先,我认为一个人可以理解的清晰代码,就像你写的那个,比单行代码要好得多。但如果你坚持......

arrayfun(@(x){sprintf('x_%d',x)},1:n)

答案 2 :(得分:1)

另一种方式。你决定它是否更清楚。 ;)

strcat('x_',strtrim(cellstr(num2str((1:n)'))))

答案 3 :(得分:1)

我不认为strtrim()是必要的。更简单:

strcat('x_',cellstr(num2str((1:n)')))