2017-10-13 2 views
-1

두 개의 다른 크기의 배열을 비교하고 일치하는 값 위치의 별도 배열과 일치 값의 개별 배열을 얻는 방법.두 개의 서로 다른 크기의 배열을 비교하고 일치하는 값과 위치 중 하나를 별도로 배열로 가져옵니다.

나는 다른 크기 내가 두 배열을 비교하고 Y 좌표와 Ylocknew 유사한 값과도 일치하는 점의 인덱스 값을 포함하는 다른 배열을 포함하는 다른 배열을 얻으려면

Ylocknew = [0 1.0000 -4.3000 5.0000 -4.2000 7.0000 -7.4000 8.0000 1.0000 4.0000] 

Ypos   = [1  5  7  8 4] 

의 두 배열이있다.

코드 :

Ypos(end:numel(Ylocknew))=inf 
R_common =Ylocknew(Ylocknew==Ypos); 
I = find(Ylocknew==Ypos); 

예상 출력 값 :

:

나는이 새로운 배열

Yposlocknew = [1 5 7 8 4] 
Yposloc = [2 4 6 8 10] 

사용 된 접근이 필요 모든 인덱스를 들어

RST_intersection = (intersect(Ylocknew,Ypos)) Output for similar values : RST_intersection = [ 1 5 7 8] 

(나는 시도) :

RST_intersection = find(intersect(Ylocknew,Ypos)) 

결과는 내가이 일을 시도하고

RST_intersection =[ 1  2  3  4] 

(즉 잘못된 것입니다)하지만 나에게 빈 행렬을주고있다 크기 1 * 0의

루프를 사용하지 않고이 작업을 수행하는 모든 빠르고 쉬운 방법은 가능한 한 많은 프로세스를 가속화합니다.

+0

이것은 ismember와 함께 얻는 결과이지만 잘못된 ismember는이 명령을 시도한 값을 복제합니다. 그리고 왜 이것이 최후의 끝 1이 맞지 않는지 이유입니다. 저는 Ypos와 Ylocknew를 매치 시켜서 반복하지 않고 행렬을 구해야합니다. Ypos는 값을 가지고 있습니다.이 값들이 같은 순서로 avaiable 인 위치가 필요합니다. – Peter

답변

1

여기에 필요한 것은 stable 플래그가있는 intersect입니다. intersect(Ylocknew,Ypos)의 모든 요소가 0이 아닌 때문에


find(intersect(Ylocknew,Ypos))

[Yposlocknew, Yposloc] = intersect(Ylocknew,Ypos,'stable'); 

은 확실히 당신에게 [1 2 3 4]을 줄 것이다.

+0

예 고맙습니다. 지금은 괜찮아요 ... 위대한 대답과 UR 도움과 시간을 upvoted 및 허용 주셔서 감사합니다. – Peter