2017-01-16 5 views
0

this matlab post에서, "루프 지우기 임의 걷기"벡터 문제의 해결책을 찾을 수 있습니다. 이 문제는 "루프 지우기"를 의미합니다. 즉, 정수 반복 사이의 정수를 제거합니다.무작위 걸음 걸이 (matlab)

예 :

한 2 열의 행렬 (평면 경우)와 같은 문제를 해결할 수있는 방법
v=[3 1 4 6 7 9 1 22 87 33 35 36 37 35 34] becomes [3 1 22 87 33 35 34]. 

?

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4] should be [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

아래 첨자를 인덱스로 변환하면 링크 된 솔루션이 생성됩니까? – beaker

+0

문제점 정의에 대한 질문이 있습니다. 자신을 1-D 벡터로 제한하면 (간략하게하기 위해) 입력 값 [1,2,3,4,3,5,4]에 대해 출력을 기대할 수 있습니다. 결과물은 [1,2,3] 또는 [1,2,3,5,4]입니까? 위에서 언급 한 솔루션은 전자를 발생시킬 수 있지만 나중에 IMO를 출력하는 것이 더 합리적입니다. – aksadv

답변

0

질문에 링크 된 스레드의 답변 중 하나가 1-D 벡터 문제를 해결합니다. 2D 배열은 실수 변환을 사용하여 복소수 변환을 사용하여 1-D 복소수 벡터로 변환 될 수 있습니다. 사소한 변형으로 1-D의 문제

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4]; 
% from your example. note the change in variable name. 

% convert the 2-D array into 1-D using real-imag to complex trasnform 
u = v*[1;i]; 

해결 what's published here에서 : 따라서, 다음의 해결책이 될 수있는 마지막

off = false; % Faster to call function FALSE once 
n = length(u); 
use = true(1, n); 
i = 1; 
while i <= n 
    multi = find(u(i:n) == u(i), 1, 'last'); 
    use((i + 1):(i + multi - 1)) = off; 
    i = i + multi; 
end 

입력 행렬에서 선택된 행 선택

v = v(use,:) 
% [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

감사합니다. 1d 복잡한 형식으로 2D 변환하면 평면 솔루션을 찾는 우아한 방법입니다. 첫 번째 의견과 관련하여 예상 출력은 물론 [1,2,3,5,4]입니다. – sapienz