2017-01-06 5 views
0

현재 제 코드는 수십 개의 필드와 많은 킬로바이트의 항목 크기를 가진 다차원 dtyp을 가진 구조화 된 마스크 된 배열을 많이 사용합니다. xarray은 훌륭한 대안이 될 수 있지만, 나는 그것을 마스크 배열을 전달하려고 할 때, 그것은 떠하기 위해 DTYPE을 변경 것으로 나타납니다,정수형을 유지하면서 마스크 된 배열을 사용하는 xarray

In [137]: x = arange(30, dtype="i1").reshape(3, 10) 

In [138]: xr.Dataset({"count": (["x", "y"], ma.masked_where(x%5>3, x))}, coords={"x": range(3), "y": 
    ...: range(10)}) 
Out[138]: 
<xarray.Dataset> 
Dimensions: (x: 3, y: 10) 
Coordinates: 
    * y  (y) int64 0 1 2 3 4 5 6 7 8 9 
    * x  (x) int64 0 1 2 
Data variables: 
    count (x, y) float64 0.0 1.0 2.0 3.0 nan 5.0 6.0 7.0 8.0 nan 10.0 ... 

이 나를 위해 바람직하지 않다 (1) 메모리 소비 때문에 내 데이터 세트가 폭발 할 것입니다. (이미 크기가 큽니다.) (2) 정수형의 대부분은 실수로 표현되어서는 안되는 비트 필드입니다. int32 비트 필드 일 수 있으며, 무손실로 float64으로 표시 될 수 있지만,보기 흉하고 오류가 발생하기 쉽습니다.

xarray.Dataset을 마스크 된 배열과 함께 사용하여 정수형을 유지할 수 있습니까?


편집 : 문제가 _maybe_promote에서 발생 나타납니다. github issue도 참조하십시오.

+0

참고 : * http : //stackoverflow.com/q/11548005/974555* 및 * http : //www.numpy.org/NA-overview.html*. – gerrit

답변

1

xarray는 안타깝게도 마스크 된 배열이나 값이 누락 된 정수 dtyp 형식을 지원하지 않습니다. 이 선택 이유는 팬더가 Cavaets and Gotchas 아래의 팬더 문서에 설명 된 것처럼 (현재) 정수 NA를 지원하지 않는 이유와 동일합니다. NumPy 배열에 대해 누락 된 값을 지원하는 정수 dtype이 필요합니다.이 값은 불행히도 존재하지 않습니다.

대부분의 경우 마스크되지 않은 정수 데이터로 작업하고 float (그리고 누락 된 값을 마스킹)로 변환하는 것으로 충분하다고 판단 했음에도 불구하고 값이 누락 된 이미지에 대해서는 매우 만족스러운 해결책이 아님에 동의합니다. 산술에 필요합니다 (예 : .fillna() 사용).

메모리 사용과 관련하여 스트리밍 방식이나 분산 방식으로 대부분의 배열 작업을 수행 할 수있는 dask으로 xarray를 시도하는 것이 좋습니다.