2012-03-09 4 views
0

저는 그 점과 함께 거리 d에있는 행렬에서 점 좌표의 모든 이웃을 원합니다.matrix + matlab에서 거리 d에있는 이웃을 찾으십시오.

이러한 부분 행렬을 생성하는 가장 효율적인 방법은 무엇입니까? A = [ 1 , 2 , 3 ; 4 , 5 , 6 ; 7 ,8 ,9]

다음 d = 0 and data 5 위해 난 5으로 답을 얻을 것이라고하지만 자체의 크기는 3X3이므로 d = 1 위해 나는 결과로 행렬 (A)을 얻을 경우, 예를 들어

.

인덱스가 매트릭스에 존재하지 않으면 동시에 그 지점에서 0을 얻어야합니다.

그렇게 data point 2 and d = 1에 대한 대답이 될 것 [ 0 , 0 , 0 ; 1 , 2 ,3 ; 4 , 5 , 6]

내가 그것을 어떻게 할 수 있습니까?

답변

0

이 밖으로 시도 ... 나는 그것이 작동하는 희망

A = padarray(A , [d d]) 
% assuming the data is at r row and c col do the following 

A(r : r + 2d , c : c + 2 d) 

을 만든 ... did'nt는 정말로 점검한다!!

+0

옥타브는 padarray를 알지 못합니다 :-(하지만 작게 작동하면 좋음 –

0

다음은 해결책입니다. 나는 그것을 당신을 함수로 바꾸어 놓을 것이다. n은 하위 배열의 가운데에있는 값을 나타내며, 예에서는 5입니다.

z = zeros(size(A,1)+2*d,size(A,2)+2*d); 
z(d+1:d+size(A,1),d+1:d+size(A,2)) = A; 
[r,c] = find(z==n); 
z(r-d:r+d,c-d:c+d) 

편집은 부적절 내 이전 시도로 테스트 버전을 사용해보십시오. find식이 여러 위치를 반환하면 여전히 대처할 수 없습니다.

그리고 저는 여전히이 효율성에 대한 보증을하지 않습니다.

+0

사례 n = 2, d = 1, (=> r = 1)은 r-d = 0 => 제로 서브 인덱스 –

+0

을 제공합니다. –

+0

잘못되었습니다 ... 나는 r, c를 알고 있다고 추측 할 수 있지만 여전히 이웃들의 관점에서 나에게 잘못된 답을주고 있습니다 – anon

0

내부에있는 경우로 시작하려면 d=0data_point=5 대신에 data_point=[2,2]을 입력해야합니다. 당신이이 5로 제공 한 경우 당신은 당신의 질문을 해석하는 방법을 따라 고의 대답처럼 찾을 수

ij = [ceil(data_point/size(A,1)), rem(data_point-1, size(A,1))+1] 

로 변환하거나 사용할 수 있습니다.

다음 기능

function B = find_neigh(A,ij,d) 
imin = max(ij(1)-d,1); 
imax = min(ij(1)+d,size(A,1)); 
jmin = max(ij(2)-d,1); 
jmax = min(ij(2)+d,size(A,2)); 
B = zeros(2*d+1,2*d+1); 
r1 = max(2-ij(1)+d,1); 
c1 = max(2-ij(2)+d,1); 
B(r1:r1+imax-imin, c1:c1+jmax-jmin) = A(imin:imax,jmin:jmax); 

당신에게 원하는 결과를 반환해야합니다.

A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; 
find_neigh(A,[1,2],1) 

편집으로 예를 들어 호출은 두 가지, 아니 세 가지 버그를 수정하고 그것을 함수

+0

아, 너무 잘못 됐어! –

+0

내 수정 사항과 관련하여 의미 하시겠습니까? 아니면 하나 더 실수를 찾았습니까? –

+0

@Kyss, 원래 게시물을 작성하지 않았으므로 코드를 전혀 테스트하지 않았습니다. Crikey, 나는 내 것을 거의 테스트하지 않았다. –

관련 문제