Memory Xarray切片打印会导致内存错误,从而引发数据数组的原始大小而不是新大小?

Memory Xarray切片打印会导致内存错误,从而引发数据数组的原始大小而不是新大小?,memory,plot,slice,python-xarray,Memory,Plot,Slice,Python Xarray,我已经创建了一个xarray数据数组的子集,以获取从(301660247676)到(61106 247676)的维度。这些尺寸是(纬度、经度、小时、天)。我还尝试将小时和天组合成一个时间戳维度(这可能不正确),然后新维度现在是(61106184224)。但是,我尝试快速绘图以检查所有lat-lon位置的第二个时间戳的值,它会抛出一个内存错误,看起来会恢复到原始大小lat&lon?我错了吗 以下代码用于创建此错误: #---------- Read in data, ERA5--------

我已经创建了一个xarray数据数组的子集,以获取从(301660247676)到(61106 247676)的维度。这些尺寸是(纬度、经度、小时、天)。我还尝试将小时和天组合成一个时间戳维度(这可能不正确),然后新维度现在是(61106184224)。但是,我尝试快速绘图以检查所有lat-lon位置的第二个时间戳的值,它会抛出一个内存错误,看起来会恢复到原始大小lat&lon?我错了吗

以下代码用于创建此错误:

  #---------- Read in data, ERA5------------------
  files_ERA5 = glob.glob(r'D:\ERA5 investigation data\ERA5 data\*.grib')
  combined_ERA5=xr.open_mfdataset(files_ERA5, chunks={'latitude': 10, 'longitude': 10}, 
  combine='by_coords',engine="cfgrib")
  print("ERA5 Dimensions:")
  combined_ERA5
输出:

我定义了所选lat和lon的阵列,以选择仅使用:

#-------subset with defined array of lat/lon (ERA5_closest_lat) for new dimensions
ERA5_closest_lat1 = list(set(ERA5_closest_lat))
ERA5_closest_lon1 = list(set(ERA5_closest_lon))
#select only the locations from the ERA5_closest_lat and ERA5_closest_lon arrays to create a subset:
subset_ERA5=combined_ERA5.sel(latitude=ERA5_closest_lat1, longitude=ERA5_closest_lon1)
print("ERA5 subset Dimensions:")
subset_ERA5

试图描绘出这一点是造成错误的原因,有什么想法吗

subset_ERA5_new[:,:,2].plot()

您是否知道Xarray有延迟/延迟的评估?打印时遇到问题,因为plot方法强制xarray进行计算;它与子集本身没有任何关系。您的第一个屏幕截图显示,正是cfgrib包试图将文件加载到内存中,这将耗资32GB。从快速阅读来看,cfgrib包确实支持惰性阅读,但我猜您的chunks参数并没有按照您的意图使用。
subset_ERA5_new[:,:,2].plot()