我有如下代码。 因此,基本上我已经预定义了一个网格,然后将每个小网格都循环到这个较大的预定义网格。但是代码卡在了重新索引部分,它只是使用了太多的内存而被压碎了。还有其他方法可以将小网格捕捉到更大的网格吗?
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")
答案 0 :(得分:0)
您在这里制作了一些巨大的数组-形状为(100001, 100001)
和uint8
dtype的数组需要10 GB的内存空间。通常,您需要至少为最大阵列大小的3-4倍才能使用NumPy舒适地操作阵列,因此如果在总内存少于约64 GB的任何计算机上失败,我将不会感到惊讶。
您应该尝试opening your datasets with dask,它与xarray一起使用以支持处理大于内存的数组。这就像在对chunks
的调用中添加xr.open_dataset()
参数一样简单。