2014-09-09 2 views
3

내 응용 프로그램에는 meshgrid 명령으로 얻은 값 행렬과 좌표 (lon, lat)가 있습니다. 경도 및 위도 제한에 따라이 행렬의 특정 하위 영역을 추출하고 싶습니다. 이 솔루션을 시도했지만 작동하지 않습니다. 출력으로 3 개의 행렬을 하나는 데이터 용으로, 다른 하나는 그리드 용으로 필요합니다.그리드 데이터의 Numpy 추출물 집합

Lons, Lats = meshgrid(X, Y) 
indexes = np.where((Lons < MLon) & (Lons > mLon) & (Lats < MLat) & (Lats > mLat)) 
newLons = Lons[indexes] 
newLats = Lats[indexes] 
newData = Data[indexes] 

얻어진 새 값은 일차원 배열이며 행렬이 아닙니다. 어떻게 해결할 수 있습니까?

답변

2

np.where 님의 관점에서 연속 직사각형 부분 행렬을 만드는 값을 추출하므로 평평하게 반환한다는 보장은 없습니다. 당신은 그것들을 재구성 할 수는 있지만 그 때문에 당신은 그들의 모양이 무엇인지 알아낼 필요가 있습니다. 더 좋고 더 일반적인 해결책은 테두리 상자를 찾아 추출하는 것입니다.

Xspan = np.where((X < MLon) & (X > mLon))[0][[0, -1]] 
Yspan = np.where((Y < MLat) & (Y > mLat))[0][[0, -1]] 

# Create a selection 
sel = [slice(Xspan[0], Xspan[1] + 1), slice(Yspan[0], Yspan[1] + 1)] 

# Extract 
newLons = Lons[sel] # == Lons[Xspan[0]:Xspan[1]+1, Yspan[0]:Yspan[1]+1] 
newLats = Lats[sel] 
newData = Data[sel]