Xarray读取并处理NC文件中遇到问题(1)

运用Xarray读取nc文件并进行数组运算的小bug:


问题描述

我这里主要是针对一个长时间序列的三维数组针对后面两个维度进行加减运算,在这个过程中发现利用xarray进行运算时会报错。

import sys
import warnings
warnings.filterwarnings("ignore")
import os
import numpy as np
import geopandas as gpd
import xarray as xr
import salem
shp_path = "/Data/LIPING/cordex/dataset/masktp/TPBoundary_HF/TPBoundary_HF_LP.shp"
tp_shp = gpd.read_file(shp_path)
hgt = xr.open_dataset('CN05-hgt.nc').topo
hgt_ma = hgt.salem.roi(shape=tp_shp)
ds = xr.open_dataset(f'masktp_cn05_tas_daily_1970-2005.nc')
tas = ds.tas
tas_hc = tas - 0.0065 * hgt_ma

报错误的描述


解决方案1:

经过尝试我发现是因为hgt存储的经纬度的属性为:latitude和longitude而,tas中存储的经纬度的属性为:lat和lon,因此我对topo这个变量重新进行属性赋值之后发现可以成功进行运算了。

import sys
import warnings
warnings.filterwarnings("ignore")
import os
import numpy as np
import geopandas as gpd
import xarray as xr
import salem
shp_path = "/Data/LIPING/cordex/dataset/masktp/TPBoundary_HF/TPBoundary_HF_LP.shp"
tp_shp = gpd.read_file(shp_path)
lon = np.arange(69.75, 140.5, 0.25)
lat = np.arange(14.75, 55.5, 0.25)
hgt = xr.open_dataset('CN05-hgt.nc').topo
hgt = xr.DataArray(hgt,coords=[lat,lon], dims=['lat','lon'])
#如果要让后续的代码能够顺利的进行运算,必须使得两个DataArray的后两个维度的属性名称和大小一致
hgt_ma = hgt.salem.roi(shape=tp_shp)
ds = xr.open_dataset(f'masktp_cn05_tas_daily_1970-2005.nc')
tas = ds.tas
tas_hc = tas - 0.0065 * hgt_ma

在这里插入图片描述


解决方案2:

将所有的数组转换城array运用numpy进行数组运算。

import sys
import warnings
warnings.filterwarnings("ignore")
import os
import numpy as np
import geopandas as gpd
import xarray as xr
import salem
shp_path = "/Data/LIPING/cordex/dataset/masktp/TPBoundary_HF/TPBoundary_HF_LP.shp"
tp_shp = gpd.read_file(shp_path)
hgt = xr.open_dataset('CN05-hgt.nc').topo
hgt_ma = hgt.salem.roi(shape=tp_shp)
ds = xr.open_dataset(f'masktp_cn05_tas_daily_1970-2005.nc')
tas = ds.tas
tas = np.array(tas)
hgt_ma = np.array(hgt_ma)
tas_hc = np.zeros_like(tas)
for i in range(tas.shape[0]):
    tas_hc[i,:,:] = tas[i,:,:] - 0.0065 * hgt_ma

在这里插入图片描述

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值