문자열의 셀 배열을 만들고 싶습니다. {'x_1', 'x_2', ..., 'x_n'}
. 나는 n
가 무엇인지 미리 알고 있습니다. 순진하게도이 셀 배열을 다음과 같이 작성할 수 있습니다.셀 배열에 숫자 문자열을 빠르게 채우십시오.
for i = 1:n
myCell{i} = sprintf('x_%d', i);
end
더 간편한 방법, 즉 1 회선이 있습니까?
문자열의 셀 배열을 만들고 싶습니다. {'x_1', 'x_2', ..., 'x_n'}
. 나는 n
가 무엇인지 미리 알고 있습니다. 순진하게도이 셀 배열을 다음과 같이 작성할 수 있습니다.셀 배열에 숫자 문자열을 빠르게 채우십시오.
for i = 1:n
myCell{i} = sprintf('x_%d', i);
end
더 간편한 방법, 즉 1 회선이 있습니까?
코드는 약 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.
우선 내가 작성한 코드처럼 이해할 수있는 명확한 코드가 한 줄짜리 코드보다 훨씬 낫다고 생각합니다. 그러나 당신이 주장한다면 ...
arrayfun(@(x){sprintf('x_%d',x)},1:n)
다른 방법으로. 그것이 더 명확한 지 아닌지를 결정합니다. ;)
strcat('x_',strtrim(cellstr(num2str((1:n)'))))
@yoda : 오타를 편집 해 주셔서 감사합니다. – yuk
나는 strtrim()
이 필요하지 않다고 생각한다. 그래서 약간 간단한 :
strcat('x_',cellstr(num2str((1:n)')))
문자열이 유효한 MATLAB 표현식이어야한다면'strtrim'이 필요합니다 :'strcat ('x _', cellstr (num1str ([1; 1000])))''x_1 '과'x_1000'을줍니다. 1 앞에 공백이 있음을 확인하십시오. – Kavka
"A 한 줄은"위의 코드보다 더 우아하지 않을 것입니다. for 루프 안에 셀 배열의 크기가 커지기 때문에 효율성이 문제가된다면 for 루프 앞에'myCell = cell (1, n)'을 추가하면됩니다. [배열 미리 할당] (http://www.mathworks.com/help/techdoc/matlab_prog/f8-784135.html#f8-793781) – Kavka