2013-07-27 2 views
4

플롯 numpy의 논리적 인덱싱은 어떻게 아래 코드 스 니펫의 "data"변수에서 데이터 포인트를 가져 옵니까? 첫 번째 매개 변수는 x 좌표이고 두 번째 매개 변수는 y 좌표라는 것을 이해합니다. 변수에서 데이터 포인트로 매핑되는 방법을 잘 모르겠습니다.이 시나리오에서 numpy의 인덱싱 작업은 어떻게됩니까

data = vstack((rand(150,2) + array([.5,.5]),rand(150,2))) 
# assign each sample to a cluster 
idx,_ = vq(data,centroids) 

# some plotting using numpy's logical indexing 
plot(data[idx==0,0],data[idx==0,1],'ob', 
      data[idx==1,0],data[idx==1,1],'or') 
plot(centroids[:,0],centroids[:,1],'sg',markersize=8) 

답변

4

그것은 모든 형태이다 :

In [89]: data.shape 
Out[89]: (300, 2) # data has 300 rows and 2 columns 
In [93]: idx.shape 
Out[93]: (300,)  # idx is a 1D-array with 300 elements 

idx == 0idx 같은 형상 부울 배열이다. idx의 요소가 동일 어디든지 그것은 True입니다 0 :

In [97]: (idx==0).shape 
Out[97]: (300,) 

idx==0이 True 위치를 인덱스 dataidx==0와 함께, 당신은 data의 모든 행을 얻을 때 :

In [98]: data[idx==0].shape 
Out[98]: (178, 2) 

당신이 인덱스 튜플을 사용하는 경우, data[idx==0, 0] 인 경우 data의 첫 번째 축은 부울 배열 idx==0으로 인덱싱되고 data의 두 번째 축은 inde 함께 고정 된 0 :

In [99]: data[idx==0, 0].shape 
Out[99]: (178,) 

data의 제 1 축 행에 대응하는 상기 제 2 축이 칼럼에 대응한다. 따라서 첫 번째 열은 data[idx==0]입니다. data의 첫 번째 열은 x 값이므로 x 값은 data입니다. 여기에서 idx==0입니다.

관련 문제