使用xarray将较小的网格捕捉到较大的预定义网格

时间:2018-08-29 15:52:39

标签: python-xarray reindex

我有如下代码。 因此,基本上我已经预定义了一个网格,然后将每个小网格都循环到这个较大的预定义网格。但是代码卡在了重新索引部分,它只是使用了太多的内存而被压碎了。还有其他方法可以将小网格捕捉到更大的网格吗?

latitudes=np.linspace(20.0000,50.0000,100001)

longitudes=np.linspace(-130.0000,-100.0000,100001)

AREASCORE=np.full((100001,100001),255,dtype=np.uint8)

AREAFUEL=np.full((100001,100001),255,dtype=np.uint8)

datasets_WFHS= xr.DataArray(AREASCORE,name='AREASCORE',dims='latitude','longitude'],coords={'latitude':latitudes,'longitude':longitudes})

print ("created empty array")





for d in glob.glob(r'Z:\travelers\shp\test\*WFHS.nc'):

    d=xr.open_dataset(d)

    d=d.reindex({'latitude': latitudes, 'longitude': longitudes}, method='nearest', tolerance=0.0001)

    print ('done reindex')

    d=d.fillna(255).astype(np.uint8)

    print ("done fillna")

    datasets_WFHS = xr.where(d==255, datasets_WFHS['AREASCORE'], d['AREASCORE'])

    print ("done np where")

1 个答案:

答案 0 :(得分:0)

您在这里制作了一些巨大的数组-形状为(100001, 100001)uint8 dtype的数组需要10 GB的内存空间。通常,您需要至少为最大阵列大小的3-4倍才能使用NumPy舒适地操作阵列,因此如果在总内存少于约64 GB的任何计算机上失败,我将不会感到惊讶。

您应该尝试opening your datasets with dask,它与xarray一起使用以支持处理大于内存的数组。这就像在对chunks的调用中添加xr.open_dataset()参数一样简单。