Быстро заполнить массив ячеек числовой строкой - PullRequest
3 голосов
/ 21 декабря 2011

Я бы хотел построить массив ячеек из строк: {'x_1', 'x_2', ..., 'x_n'}.Я знаю, что n опережает время.Наивно я мог бы построить этот массив ячеек следующим образом:

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

Есть ли более элегантный способ сделать это, то есть однострочный?

Ответы [ 4 ]

5 голосов
/ 21 декабря 2011

Ваш код примерно в три раза быстрее, чем некоторые из предоставленных ответов:

%
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 голос
/ 21 декабря 2011

Другой способ. Вы сами решаете, понятнее это или нет. ;)

strcat('x_',strtrim(cellstr(num2str((1:n)'))))
1 голос
/ 21 декабря 2011

Я не думаю, что strtrim() необходимо.Так немного проще:

strcat('x_',cellstr(num2str((1:n)')))
1 голос
/ 21 декабря 2011

Прежде всего, я думаю, что понятный код, такой как тот, который вы написали, гораздо лучше, чем однострочный. Но если вы настаиваете ...

arrayfun(@(x){sprintf('x_%d',x)},1:n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...