2014-10-08 5 views
0

for 루프의 각 반복에서 크기를 변경하는 배열을 저장하려고합니다. 예를 들어 ,가변 길이 배열을 저장하는 방법은 무엇입니까?

for y=1:100 
    for x=1:50 
. 
. 
     ms(:,x,y) = ans; 
. 
. 
    end 
end 

'ANS은'Y의 각 반복에서의 크기를 변경하는 행 벡터이다.

어떻게 이러한 가변 길이 'ans'를 ms에 저장할 수 있습니까?

'ms'를 셀로 초기화하려고하면 "두 번에서 셀로 변환 할 수 없습니다."라는 오류가 표시됩니다.

어떻게 해결할 수 있습니까?

감사 종류는이 작업을 수행하는

+1

셀 배열, 즉'() '대신 – Dan

답변

1

한 가지 방법에 관하여 :

ms = {}; 
for y=1:100 
    for x=1:50 
     ms = [ms 1:x]; 
     % or 
     % ms = [ms new_cell_element]; 
    end 
end 

을 또한 지수는 ms{x,y} = 1:3; new_cell_element와 셀 어레이가 수행을 는 셀을해야, 그것은 아무것도 할 수 없습니다 네가 원해. 나는이하지 않는 것이 좋습니다, 나는 당신이 그 중첩 루프 내부에서 수행하려는 작업에 따라이 작업을 수행하는 다른 방법이있다 확신

ms = [ms, 'A string', (1:5).'] %// Works! 

참고. cellfun을 확인하고 일반적으로 cells을 읽어야합니다.

또한 ans을 MATLAB의 변수 이름으로 사용하십시오. 그것은 단지 당신에게 문제를 일으킬 것입니다. 다른 이름은 (except clear and builtin)이 좋습니다.

+0

아하하하 (약 30 초 간격)를 사용하십시오. 재밌 네요 :) – rayryeng

+0

하! @rayryeng을 감추기 위해 당신은 기다리고있었습니다! 나는 당신에게 +1을 주겠지 만'ans'을 변수 이름으로 사용하면서 여전히 그것을 할 수는 없습니다. = P –

1

제가 생각할 수있는 유일한 방법은 실제로 셀 배열을 사용하는 것입니다. 과 같이 2 차원 셀 어레이를 초기화 : 후

ms = cell(50,100); 

하면 인덱스를 셀에 중괄호 ({})를 사용하여. '

vec = ms{row,col}; 

BTW, 내가 돈 : 작업을 완료 한 후

for y=1:100 
    for x=1:50 
. 
. 
     ms{x,y} = ans; 
. 
. 
    end 
end 

, 당신은 행과 열 위치를 선택하여 셀 배열에 인덱스 원하는 수 : 따라서, 귀하의 루프 모양을 변수로 ans을 사용하는 것이 좋습니다. ans은 출력이있는 MATLAB에서 명령문을 실행할 때 사용되는 기본 변수이며 함수에서이 출력이 나오는 변수를 지정하지 않습니다. ans 변수를 덮어 쓸 코드가있을 수 있으므로 다른 이름을 사용해야합니다.