繁体   English   中英

切片无法在dask大块xarray上使用

[英]Slice not working on dask chunked xarray's

我有一个大的xarray,它具有时间,y和x维度,并且以大块时间= 1,x = 2000,y =2000。它看起来像这样:

<xarray.Dataset>
Dimensions:  (time: 59, x: 6951, y: 6963)
Coordinates:
  * y        (y) float64 5.193e+06 5.193e+06 5.193e+06 ... 5.298e+06 5.298e+06
  * x        (x) float64 7.475e+05 7.476e+05 7.476e+05 ... 8.518e+05 8.518e+05
  * time     (time) datetime64[ns] 2017-11-11T03:51:53 ... 2018-02-27T03:40:41
Data variables:
    green    (time, y, x) uint16 dask.array<shape=(59, 6963, 6951), chunksize=(2, 1000, 1000)>
    swir_1   (time, y, x) uint16 dask.array<shape=(59, 6963, 6951), chunksize=(2, 1000, 1000)>
    mask     (time, y, x) int8 dask.array<shape=(59, 6963, 6951), chunksize=(2, 1000, 1000)>
Attributes:
    crs:      EPSG:32648

我正在尝试对这段代码进行切片,因此我可以对它的一小部分进行迭代计算,并在最后创建一个新的xarray(由于在执行.compute()的速度方面存在问题)。 我一直在尝试各种变体:

data.sel(x=slice(0,100),y=slice(0,100))                                

但这(和类似的变体)只会产生:

<xarray.Dataset>
Dimensions:  (time: 59, x: 0, y: 0)
Coordinates:
  * y        (y) float64 
  * x        (x) float64 
  * time     (time) datetime64[ns] 2017-11-11T03:51:53 ... 2018-02-27T03:40:41
Data variables:
    green    (time, y, x) uint16 dask.array<shape=(59, 0, 0), chunksize=(2, 0, 0)>
    swir_1   (time, y, x) uint16 dask.array<shape=(59, 0, 0), chunksize=(2, 0, 0)>
    mask     (time, y, x) int8 dask.array<shape=(59, 0, 0), chunksize=(2, 0, 0)>
Attributes:
    crs:      EPSG:32648

这是由于尝试对分块数组进行切片导致的吗? 我试过将块大小与切片对齐,但是这产生了类似的问题。 理想情况下,我只想使用xarray的dask框架并行进行数据的计算(例如创建索引和总和),但是我无法使其工作,或者至少任何计算都需要花费一定的时间。时间长(超过30分钟)。

Xarray有两种选择方法, .sel().isel() .sel()基于沿着指定尺寸的刻度标签进行选择。 .isel()基于指定维度上的整数位置进行选择。

在您的情况下,您似乎要使用.isel()

# select a 100x100 window 
data.isel(x=slice(7.475e+05, 7.700e+05), y=slice(5.190e+06, 5.195+06))

或带有对应于x和y(而不是整数)的刻度标签的.sel()

# select a window based on x/y values 
data.sel(x=slice(0, 100), y=slice(0,100))

旁注:很难说,但是dask的性能问题希望与此问题无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM