目的:应武大-气候的一位同学写的一个小功能的函数
原始
掩膜后
第一步导入需要的两个库
import shapefile
from matplotlib.path import Path
第二步读取shpfile的边界信息
shpFilePath = "ThreeRiversPlainAsOne/ThreeRiversPlainAsOne.shp"
listx=[]
listy=[]
test = shapefile.Reader(shpFilePath)
for sr in test.shapeRecords():
for xNew,yNew in sr.shape.points:
listx.append(xNew)
listy.append(yNew)
第三步读取WRFOUT数据
data = netCDF4.Dataset('wrfout_d01_2020-06-20_00_00_00', 'r')
lon = data.variables['XLONG'][0,:,:]
lat = data.variables['XLAT'][0,:,:]
T2 = data.variables['T2'][:]
第四步将lon和lat二维数据转为一维数据
X = lon.ravel()
Y = lat.ravel()
第五步判断第四步中的经纬度度是否在shpfile中
buffer_array = Path(np.array([listx,listy]).transpose()).contains_points(list(zip(X, Y)))
第六步将第五步中的一维数组转换为第三步中相同size的二维数组
buffer_array.resize(lon.shape)
第七步将区域外的数值设置为缺失值,注意~为反函数
T2 = np.where(buffer_array, T2, np.nan)
#T2 = np.where(~buffer_array, T2, np.nan)
第八步求取上述第七步中T2最大值、最小值、平均值、求和等等
tmp = np.nanmax(T2)
tmp = np.nanmin(T2)
tmp = np.nanmean(T2)
tmp = np.nansum(T2)
整体写下来,最大的收获还是以前的心得---如何玩转数组。