2016-08-16 2 views
0

매우 쉽게 발생할 수있는 문제가 발생했지만 그 위에 몇 시간을 보내고 있습니다. 나는 어떤 도움을 주셔서 감사합니다.Matlab에서 마스킹

인덱스가 0과 1 인 행렬 R (1024x1280 double)과 3000 행렬의 위치 인 F (3000x2 double)의 또 다른 행렬 (물론 R 행렬의 관점에서)이 있습니다. 어떻게 행렬이 R 행렬에서 1인지 F 행렬의 점을 선택할 수 있습니까? 나는 나에게 정답 제공하지 않습니다 아직 방법을 다음과 같은 시도했지만 한 :

siz= size(R); 
fet = false(siz(1),siz(2)); 
fet(F(:,1),F(:,2)) = true; 
[xf,yf]=find(fet==1 & R==1);` 

나는 F에서 루프를 작성하고 한 지점 (F(1,1), F(1,2))에 의해 하나를 선택하고 같은 위치에 있는지 확인 수 있다는 것을 알고를 R 행렬은 1과 같고 점을 저장합니다. 그러나 이것은 비효율적 인 방법입니다. 이 점에서 아무도 나에게 손을 댈 수 없습니까? 보다도,

답변

2

당신은 논리 값을 얻을 수 R에 선형 인덱스 다음 인덱스에 F 변환 sub2ind를 사용할 수 있습니다.

bool = logical(R(sub2ind(size(R), F(:,1), F(:,2)))); 
touse = F(bool,:); 
+0

감사합니다. 그리고 부울로부터 F의 올바른 포인트를 얻는 방법. 나는 matlab에 초보자입니다. 바보 같은 질문에 대한 미안. – Sam

+0

@Sam 예제로 업데이트되었습니다. – Suever

+0

감사. 그것은 저에게이 오류를주었습니다 : 첨자 인덱스는 실수 양수 또는 논리이어야합니다. 그리고 나서이 form.tout = F (logical (bool), :)로 변경했습니다. 제대로 작동합니다. 고마워. – Sam