2014-12-04 4 views
0

는 I는 NumPy와 배열을 나중에 플롯 DAT 유지 X/Y 값을 가지고NumPy와 데이터 포인트 영역/원

[ 
    [1 2 3 4 5] 
    [2 4 6 8 10] 
] 

을 DAT [0]는 x 값, DAT 1 보유에는 해당 y- 값이 들어 있습니다.

이제 어떤 데이터 포인트가 특정 범위 (예 : 5) 인 이웃을 가지고 있는지 알고 싶습니다. 그래서 다음과 같이했습니다. 0 점 (Y, X = 1, = 2)의 경우 :

numpy.where(
    (dat[0] > dat[0][0] - 5) 
    & 
    (dat[0] < dat[0][0] + 5) 
    & 
    (dat[1] > dat[1][0] - 5) 
    & 
    (dat[1] < dat[1][0] + 5) 
) 

이 작동하지만, 특정 범위/영역은 10 × 10 크기의 정사각형이고, I는 싶은 원을 갖고있다.

내 다음 시도는 두 점으로 잘 작동하는 지점 (벡터 길이가 5보다 작아야 함) 사이의 벡터로 데이터를 필터링하는 것이었지만이를 위해 올바른 numpy.where 문을 계산할 수 없습니다. 두 지점에 대한

그것은 단순히 :

math.sqrt((x_p1 - x_p2)**2 + (y_p1 - y_p2)**2) < 5 

하지만 어떻게 같은 동등한 numpy.where 보일 것입니까? 전체 배열에서이 점을 반복적으로 실행하고 싶습니다. ,

enter image description here

(P1) 1 점 내 데이터에서 내가 5의 반경 원에있는 모든 녹색 포인트를 획득 할 :

시각화하고 잘하면 문제를 명확히하기 위해 빨간색 점이 필터링되어야합니다.

벡터의 길이를 가진 위의 솔루션은 두 점에 대해서만 이것을 달성합니다. 전체 배열에서 작동하여 numpy와 for-loop가 가능하도록합니다. 모든 이웃을 얻으려면 < 5 점마다 5 점 배열

+0

을 나는 당신이'np.where'를 사용하기보다는 [numpy의 부울 인덱스 (boolean indexing)] (http://docs.scipy.org/doc/numpy/user/basics.indexing.html)를 좀 더 조사해야한다고 생각합니다. 아마도 [pandas-finding-within-maximum-distance] (https://stackoverflow.com/questions/26825710/pandas-finding-points-within-maximum-distance/26871198#26871198)도 도움이됩니다. –

+0

또한 numpy가 배열을 사용하여 수학을 수행하는 방법을 볼 수 있습니다. x 및 y 포인트는 배열 일 수 있습니다 (math.sqrt가 아닌'np.sqrt'를 사용하십시오!). 또한 파이썬리스트와 numpy 배열이 같은 것은 아니라는 점도 알아 두십시오. – Ajean

답변

1

당신은 복잡한 숫자와 함께 할 다음 abs의 사용을 만들 수있는 루프와 방송 :

a=np.array([1,2,3,4,5]) 
b=np.array([6,7,8,9,10]) 
c=[np.complex(x,y) for x,y in zip(a,b)] 

for x in c: 
    c[np.abs(c-x)<5] 

아니면 좌표가 아닌 값을 원하는 경우 :

for x in c: 
    np.where(np.abs(c-x)<5)