2017-11-22 18 views
0

세 개의 다른 배열이 있습니다.각 치수에 대해 다른 마스크를 사용하여 2D 배열을 마스크하십시오.

하나는 경도 배열 (-90 ~ 90)이고 또 하나는 경도 배열 (0 ~ 360)이고 마지막은 형태 (len (lats), len (lons))가있는 2D 온도 배열입니다. len !) = LEN (Lons의) 나는 다른 수단을 통해 경도 마스크를 획득하고를 통해 위도 마스크를 만든

: 나는에 적용 할 내가 두 1D 마스크가 이제

latmask = np.ma.masked_where(np.logical_or(lat < -60, lat > 60), lat).mask 

. "or"논리 (해당 색인의 위도 또는 경도가 마스크 된 경우 별칭으로 2D 데이터를 마스크해야 함)와 함께 해당 축을 따라 2D 데이터.

내가 사용하여 2D 마스크에 두 개의 1D 마스크를 결합하는 시도 :

2dmask = np.logical_or(latmask , lonmask) 
2dmask = latmask * lonmask 

그러나이 두 배열은 같은 모양하지 않은 말하는 오류를 제공합니다.

2dmask = latmask[np.newaxis, :] & lonmask[:, np.newaxis] 

하지만 난 그렇게처럼 내 데이터에이 마스크를 적용하고 그 결과 플롯하려고하면

testdata = np.ma.masked_array(nt[0,50,:,:], mask = 2dmask) 
나는 다음과 같은 줄거리 얻을

:

Bad Masking

을하지만,이 플롯을 +/- 60도 위의 마스크 된 데이터 위 및 아래의 데이터가 있어야하며 일부 연속 마스크의 경도는 마스크 (기본적으로 데이터의 사각형 추출)됩니다.

나는 지난 30-45 분 동안 문서를 검색하고 행운이없는 유사한 문제에 대해 스택 오버플로를 보냈다.

도움 주셔서 감사합니다.

twodmask = latmask[:, None] & lonmask[None, :] 

아마도 사용하거나 대신를 실행 한 다음,

인걸요

답변

1

내 생각 엔 솔루션이 거의 바로 바로 플립 차원이다? (그것에 대해 확실하지 않습니다.)

twodmask = latmask[:, None] | lonmask[None, :] 
+1

트릭을 했습니까? 나는을 사용하고 치수를 뒤집었다. 도와 주셔서 감사합니다! –