2014-07-16 3 views
0

미리 할당해야하는 루프가 있다고 가정합니다. "0", "눈" 또는 "NAN" 행렬 중 하나를 수행 할 수 있습니다. 문제는이 3 개의 행렬 중 하나를 사용했을 때 유니온 함수를 사용한 후에 마지막에 지워야하는 추가 줄 (또는 하나 또는 NAN)이 남아있게됩니다. 예를 들어루프에 "Union"함수가있을 때 MATLAB에서 사전 할당

:

Q=[0 0]; 

for i=1:10 
q= [rand(1) 2*rand(1)]; 
Q= union(Q,q,'rows'); 
end 

이 결과, [0 0] 어레이가 삭제되어야 우리 행렬의 시작 부분에 남아있다. 첫 번째 라인을 삭제하지 않고도 재 할당 할 수있는 코드로 도움이 될 수 있다면

Q(1,:)=[];

궁금 해서요.

P. 이미지 만 있으면 합집합과 루프를 유지할 이유가 있습니다.

감사

+0

@Divakar 이걸 좀 봐 주시겠습니까? 감사 – Iman

답변

1

원하지 않는 노동 조합을 요청하지 마십시오 값으로 초기화하는 대신 원하지 않는 값으로 Q를 초기화,

Q = []; 

for i=1:10 
    q = [rand(1) 2*rand(1)]; 
    if(isempty(Q)) 
     Q = q; 
    else 
     Q = union(Q,q,'rows'); 
    end 
end 

또는 당신은 다음을 원합니다 :

Q = [rand(1) 2*rand(1)]; 

for i=1:9 
    q = [rand(1) 2*rand(1)]; 
    Q = union(Q,q,'rows'); 
end 

이것은 실제로 사전 할당과 관련이 없습니다. union 작품은 이전에 값을 덮어 쓸 때마다 Q가 매번 새로운 값을 반환하도록 강제합니다. preallocation은 출력 크기 조정으로 인한 추가 메모리 할당을 피하기 위해 적절한 크기의 출력 행렬의 올바른 위치에 데이터를 삽입하는 경우입니다.

관련 문제