2017-03-01 8 views
0

말을 좌표서브 세트 xarray.Dataset는 인쇄 할 때 나는 다음과 같습니다 <code>xarray.open_dataset(..., decode_times=False)</code>를 사용에 넣은 <code>xarray.Dataset</code> 개체가

<xarray.Dataset> 
Dimensions: (bnds: 2, lat: 15, lon: 34, plev: 8, time: 3650) 
Coordinates: 
    * time  (time) float64 3.322e+04 3.322e+04 3.322e+04 3.322e+04 ... 
    * plev  (plev) float64 1e+05 8.5e+04 7e+04 5e+04 2.5e+04 1e+04 5e+03 ... 
    * lat  (lat) float64 40.46 43.25 46.04 48.84 51.63 54.42 57.21 60.0 ... 
    * lon  (lon) float64 216.6 219.4 222.2 225.0 227.8 230.6 233.4 236.2 ... 
Dimensions without coordinates: bnds 
Data variables: 
    time_bnds (time, bnds) float64 3.322e+04 3.322e+04 3.322e+04 3.322e+04 ... 
    lat_bnds (lat, bnds) float64 39.07 41.86 41.86 44.65 44.65 47.44 47.44 ... 
    lon_bnds (lon, bnds) float64 215.2 218.0 218.0 220.8 220.8 223.6 223.6 ... 
    hus  (time, plev, lat, lon) float64 0.006508 0.007438 0.008751 ... 

lat이 주어진 여러 범위를 하위 집합하는 가장 좋은 방법이 될 것입니다 무엇 lontime? 나는 일련의 조건을 체인 시도 xarray.Dataset.where 사용하지만, 나는 오류 말하는 얻을했습니다

IndexError: The indexing operation you are attempting to perform is not valid on netCDF4.Variable object. Try loading your data into memory first by calling .load(). 

I 메모리에 전체 데이터 집합을로드 할 수 없습니다, 그래서이 작업을 수행하는 일반적인 방법이 될 것입니까?

답변

1

NetCDF4는 NumPy에서 지원하는 모든 다차원 색인 작업을 지원하지 않습니다. 그러나 슬라이싱 (매우 빠름)과 1 차원 인덱싱 (다소 느림)을 지원합니다. 시도

어떤 것들은 : 조각

  • 지수 (예를 들어, .sel(time=slice(start, end))) 1 차원 배열과 인덱스 전에. 이것은 배열 기반 인덱싱을 netCDF4에서 Dask/NumPy로 오프로드해야합니다.
  • 인덱싱 작업을 더 적은 차원을 따라 한 번에 인덱싱하는 더 많은 중간 작업으로 나눕니다. 이미이 제품을 사용해 본 것 같지만 조금만 더 살펴볼 필요가있을 것입니다.
  • 성능을 최적화하려면 .chunk()을 사용하여 다른 Dask 청킹 방식을 시도해보십시오.

GitHub의 xarray 문제 추적기에 자체적으로 제공되는 예제를 게시하면 더 자세히 살펴볼 수 있습니다.

+0

감사합니다. 나는'.sel() '을 사용하여 끝내었다. (어떤 이유로 조각을 만들 수 있다는 것을 깨닫지 못했다.) 내가 볼 수있는 유일한 문제는 경도에 대한 원통형 좌표를 다루는 것입니다. 당신은 이것을 위해 무엇을 제안하겠습니까? 어쩌면'.sel()'다음에'.where()'를 사용하여 경도를 부분 집합 할 것인가? – pbreach

+0

몇 가지 아이디어를 보려면이 대답을 참조하십시오. http://gis.stackexchange.com/questions/205871/xarray-slicing-across-the-antimeridian – shoyer

+0

Ahhhh okay는 내가 .sel() 필자는 소스 코드와 문서를 더 읽기 시작할 필요가 있습니다. 정말 좋은 패키지 btw! – pbreach