我想构建一个字符串数组:{'x_1', 'x_2', ..., 'x_n'}
。我知道什么n
提前。用数值字符串快速填充单元阵列
for i = 1:n
myCell{i} = sprintf('x_%d', i);
end
有没有更优雅的方式来做到这一点,即,一个班轮:我天真如下可能建立这个单元阵列?
我想构建一个字符串数组:{'x_1', 'x_2', ..., 'x_n'}
。我知道什么n
提前。用数值字符串快速填充单元阵列
for i = 1:n
myCell{i} = sprintf('x_%d', i);
end
有没有更优雅的方式来做到这一点,即,一个班轮:我天真如下可能建立这个单元阵列?
你的代码比一些问题的答案提供了更快的三倍:
%
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.
首先,我认为一个你可以理解的明确的代码,比如你所写的代码,要比单行代码好得多。但如果你坚持...
arrayfun(@(x){sprintf('x_%d',x)},1:n)
另一种方式。你决定它是否更清晰。 ;)
strcat('x_',strtrim(cellstr(num2str((1:n)'))))
@yoda:感谢您编辑我的错字。 – yuk 2011-12-20 22:46:26
我不认为strtrim()
是必要的。所以稍微简单:
strcat('x_',cellstr(num2str((1:n)')))
如果字符串必须是有效的MATLAB表达式,'strtrim'是必需的:'strcat('x _',cellstr(num2str([1; 1000])))'给出'x_ 1'和'x_1000'。注意1前面的空格。 – Kavka 2011-12-20 22:10:02
“一个班轮”不会比上面的代码更优雅。如果效率是一个问题,由于for循环内单元数组的大小增加,可以在for循环之前添加'myCell = cell(1,n)'。请参阅[预分配数组](http://www.mathworks.com/help/techdoc/matlab_prog/f8-784135.html#f8-793781) – Kavka 2011-12-20 21:54:48