2017-05-10 1 views
4

전체 미국의 온도 시계열을 나타내는 3D 배열을 가지고 있다고 가정하면 [Time, Lat, Lon]입니다. 저는 100 개의 서로 다른 위치에 대한 표 형식의 시계열을 원합니다. numpy fancy indexing을 사용하면 [:, [lat1, lat2...], [lon1, lon2...]]처럼 보일 것입니다. Dask 배열은 이러한 종류의 색인 생성을 아직 허용하지 않습니다. 한계를 감안할 때이 작업을 수행하는 가장 좋은 방법은 무엇입니까?dask 배열의 n 개의 개별 요소에 대한 슬라이스

답변

4

인덱서를 vindex 사용.

In [1]: import dask.array as da 

In [2]: import numpy as np 

In [3]: x = np.arange(1000).reshape((10, 10, 10)) 

In [4]: dx = da.from_array(x, chunks=(5, 5, 5)) 

In [5]: xcoords = [1, 3, 5] 

In [6]: ycoords = [2, 4, 6] 

In [7]: x[:, xcoords, ycoords] 
Out[7]: 
array([[ 12, 34, 56], 
     [112, 134, 156], 
     [212, 234, 256], 
     [312, 334, 356], 
     [412, 434, 456], 
     [512, 534, 556], 
     [612, 634, 656], 
     [712, 734, 756], 
     [812, 834, 856], 
     [912, 934, 956]]) 

In [8]: dx.vindex[:, xcoords, ycoords].compute() 
Out[8]: 
array([[ 12, 112, 212, 312, 412, 512, 612, 712, 812, 912], 
     [ 34, 134, 234, 334, 434, 534, 634, 734, 834, 934], 
     [ 56, 156, 256, 356, 456, 556, 656, 756, 856, 956]]) 

몇 가지주의 사항 :이 점별 인덱싱하거나 단 하나의 전체 조각 받아

  • 이 없습니다 (아직) NumPy와 배열에서 사용할 수있는, 그러나 제안한다. 제안서 here을 참조하십시오.

  • 새로운 축을 항상 맨 앞에 놓으므로 numpy fancy indexing과 완전히 호환되지 않습니다. 간단한 transpose하지만 이러한 rearange 수 있습니다

예를 :

In [9]: dx.vindex[:, xcoords, ycoords].T.compute() 
Out[9]: 
array([[ 12, 34, 56], 
     [112, 134, 156], 
     [212, 234, 256], 
     [312, 334, 356], 
     [412, 434, 456], 
     [512, 534, 556], 
     [612, 634, 656], 
     [712, 734, 756], 
     [812, 834, 856], 
     [912, 934, 956]]) 
관련 문제