2017-12-31 57 views
0

봇용 Starcraft 2 맵 내 미네랄/가스 영역을 확인하려고합니다. 아래 이미지는 1이 미네랄 또는 가스 패치를 나타내는 2 차원 배열의 플롯을 보여줍니다.2 차원 배열의 파이썬 클러스터 또는 그룹 바이너리 데이터

눈을 가려면 확인하고 싶은 클러스터가 4 개 있다는 것을 알 수 있습니다. 내가 사용 시도

:

from scipy.ndimage import measurements 
lw, num = measurements.label(map) 

(지도) 광물/가스 패치가 사람과 64,64 배열입니다.

4 클러스터 내에 공백이 있으므로 21 개의 클러스터를 찾습니다.

또한 배열을 가져올 때 찾고있는 클러스터의 수를 알 수 없습니다. Connected-component labeling을보고 있었지만, 3 또는 4 위치 요소가 1이라고 말하면 볼 수있는 방법을 볼 수 없었습니다. 연결 요소로 간주 될 수 있습니다. 나는 단지 4 또는 8 연결 방법을 보았다.

어떻게하면이 문제를 해결할 수 있을까요?

map showing minerals/gas

답변

0

클러스터가 명확하게 구분되어있는 것처럼 보입니다. 따라서 클러스터를 부분적으로 융합시켜야합니다. 예를 들어, 당신은 scipy.ndimage.morphology.binary_dilation을 사용할 수

from scipy.ndimage import measurements, morphology 
import numpy as np 

# create mock data 
data = """ 

    1111 1      1 
     1     1 
     1    11111 



111111 111 
      1 
      1 

""" 

data = np.array(data.split('\n')) 
data = data.view('U1').reshape(len(data), -1) == '1' 
# blow it up a bit 
data = np.kron(data, np.ones((2, 2), dtype=int)) 


# "algorithm" starts here 
grow = morphology.binary_dilation(data, structure=np.ones((5, 5), dtype=int) 
lbl, npatches = measurements.label(grow) 
lbl[data==0] = 0 
# end of algorithm 


# show 
res = '\n'.join(lbl.astype('U1').view(f"U{lbl.shape[1]}").ravel()).replace('0', ' ') 
print(res) 

출력 : 직접 실제 데이터에서 작동하지 않는 경우

 11111111 11           22 
     11111111 11           22 
        11          22 
        11          22 
        11       22222222  
        11       22222222  






     3333333333 333333          
     3333333333 333333          
          33          
          33          
          33 3333        
          33 3333        

, 다른 구조 요소를 시도하거나 multiplr 시간을 확장시키고.

+0

위대한 작품. 감사. 나는 원래 게시물에 내 작업의 두 번째 부분을 놓는 것을 잊었다. 다른 게시물을 만들지 말지는 모르겠지만 요청을 시도 할 것이라고 생각했습니다. 또한 각 클러스터에서 최적의 거리에 대상을 배치 할 위치를 찾아야합니다. 예를 들어 클러스터의 각 요소에서 최소 4 단위 (유클리드 거리) 인 각 클러스터에 가장 가까운 지점을 어떻게 찾을 수 있습니까? 즉, 지점은 클러스터의 어떤 부분과 거리의 4 단위 이내 일 수 없습니다. –

+0

@CraigHamilton 나는 새로운 질문을하기에 충분하다고 생각한다. –

-2

이 실제로 clustering algorithms 문제의 전체 클래스입니다.

here과 같은 반복 k-means 스타일 방법으로 시작하는 것이 좋습니다. 크기 2 - n (또는 많은 클러스터를 찾을 수 있다고 생각하는 경우)을 실행하면 P 값을 사용하여 클러스터의 신뢰성을 측정 할 수 있습니다. (즉, P 값은지도 상에 명확하게 3 개의 클러스터가있을 때 2 클러스터로 k- 수단을 실행할 때 매우 높음/확실해야합니다. 3 클러스터로 k- 수단을 실행하는 경우 낮은/확실해야합니다)

행운을 빈다.

0

이것은 단일 링크 계층 적 클러스터링 또는 DBSCAN을 사용하여 클러스터하는 것이 간단합니다. 미네랄 근처에 가깝고 먼 광물을 분리 할만큼 충분히 작은 거리 임계 값을 사용하십시오. 아마 5 개의 세포가 잘 작동합니다.

+0

제안 해 주셔서 감사합니다. 이 방법에 대해서도 배우게 될 것입니다. –