2011-12-20 8 views
3

문자열의 셀 배열을 만들고 싶습니다. {'x_1', 'x_2', ..., 'x_n'}. 나는 n가 무엇인지 미리 알고 있습니다. 순진하게도이 셀 배열을 다음과 같이 작성할 수 있습니다.셀 배열에 숫자 문자열을 빠르게 채우십시오.

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

더 간편한 방법, 즉 1 회선이 있습니까?

+3

"A 한 줄은"위의 코드보다 더 우아하지 않을 것입니다. for 루프 안에 셀 배열의 크기가 커지기 때문에 효율성이 문제가된다면 for 루프 앞에'myCell = cell (1, n)'을 추가하면됩니다. [배열 미리 할당] (http://www.mathworks.com/help/techdoc/matlab_prog/f8-784135.html#f8-793781) – Kavka

답변

5

코드는 약 3 배 빠른 속도로 제공하는 몇 가지 답변보다 :

% 
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

우선 내가 작성한 코드처럼 이해할 수있는 명확한 코드가 한 줄짜리 코드보다 훨씬 낫다고 생각합니다. 그러나 당신이 주장한다면 ...

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

다른 방법으로. 그것이 더 명확한 지 아닌지를 결정합니다. ;)

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

@yoda : 오타를 편집 해 주셔서 감사합니다. – yuk

1

나는 strtrim()이 필요하지 않다고 생각한다. 그래서 약간 간단한 :

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

문자열이 유효한 MATLAB 표현식이어야한다면'strtrim'이 필요합니다 :'strcat ('x _', cellstr (num1str ([1; 1000])))''x_1 '과'x_1000'을줍니다. 1 앞에 공백이 있음을 확인하십시오. – Kavka

관련 문제