因为最近在做算法优化,所以对数据统一性有一定要求,在最近的研究中主要用一个简单的最近邻插值对数据集进行降尺度处理。主要运用到的函数时scipy里面的griddata第一步:导入相关库import xarray as xr from scipy.interpolate import griddata # 插值函数import numpy as np第二步:给出插值到的经纬度信息(目标经纬度)mask_tmp = xr.open_dataset(‘G:/China/temperatu
因为最近在做算法优化,所以对数据统一性有一定要求,在最近的研究中主要用一个简单的最近邻插值对数据集进行降尺度处理。
主要运用到的函数时scipy里面的
griddata
`scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)`
points:2-D ndarray of floats with shape (n, D), 或 length D tuple of 1-D ndarrays with shape (n,).
values:ndarray of float 或 complex, shape (n,)
xi:2-D ndarray of floats with shape (m, D), 或 length D tuple of ndarrays broadcastable to the same shape.
method:{‘linear’, ‘nearest’, ‘cubic’}, 可选参数
nearest:返回最接近插值点的数据点的值 linear:线性插值 cubic:三次样条插值
import xarray as xr
from scipy.interpolate import griddata # 插值函数
import numpy as np
mask_tmp = xr.open_dataset('G:/China/temperature_max/nc/2000/tmx_2000_1.nc')
# 待插值的标准经纬度
mask_tmp_lon = mask_tmp.lon.values # (7680,) 一维
mask_tmp_lat = mask_tmp.lat.values # (4717,) 一维
mask_LON,mask_LAT = np.meshgrid(mask_tmp_lon,mask_tmp_lat) # (4717, 7680) 生成经纬度网格
rad = xr.open_dataset('D:/Users/62692/Desktop/rad.nc')
# 辐射数据经纬度
rad_lon = rad.lon.values # 辐射数据经度 (641,)
rad_lat = rad.lat.values # 辐射数据纬度 (394,)
rad_LON, rad_LAT = np.meshgrid(rad_lon,rad_lat) # (394, 641)
rad_LON = rad_LON.ravel().reshape(-1,1) # 展平 (252554, 1)
rad_LAT = rad_LAT.ravel().reshape(-1,1) # 展平 (252554, 1)
rad_values = rad['rad'].values # 需要插值的辐射数据 (394, 641)
points = np.concatenate([rad_LON,rad_LAT],axis = 1) # (252554, 2)
data = griddata(points, rad_values.ravel(),(mask_LON,mask_LAT),method='nearest') # 用最近邻插值即可
# rad_values.ravel() (252554,)
# 这里用最邻近主要考虑到辐射数据的连续性变化,对于线性插值或者三次插值并没有多大影响
版权声明:本文为博主 爱编程的海星 原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/qq_45689568/article/details/122645084
赞 (0)
Couldn‘t find Lora with name guofeng3_v32Light 0% 0/20 [00:00<?, ?it/s] Error completing request A
2023年4月16日