提问人:Shayma 提问时间:11/15/2023 更新时间:11/15/2023 访问量:12
Scipy Interp2d 在循环期间第二次不工作?
Scipy Interp2d not working the second time during loop?
问:
我有一个包含 12 个文件的列表,每个文件都包含海面盐度数据。我的目标是读取每个文件,将数据从 720x1440 网格插值到 361x720 网格,然后堆叠每个文件,以便我有一个形状为 361x720x12 的变量。为此,我创建了一个读取每个文件的 for 循环。
但是,我注意到我阅读的第二个文件,插值不起作用。我不知道为什么,我希望有人能指出我正在做的事情,我没有注意到。
我的代码:
for file in range(len(direc)):
if file == 0:
fname=direc[file]
ds=xr.open_dataset(fname)
SSS_lat=ds['latitude'].values
SSS_lon=ds['longitude'].values
SSS_time=ds['time'].values
SSS=ds['sss'].values
SSS=np.squeeze(SSS)
#convert lon from [-180 to 180] to [0 360]
idx=np.where(SSS_lon < 0)
SSS_lon[idx]=SSS_lon[idx]+360
ix=np.argsort(SSS_lon)
SSS_lon=SSS_lon[ix]
SSS=SSS[:,ix]
# flip the latitudes so it ranges from [90 -90] instead of [-90 90]
SSS_lat=np.flip(SSS_lat)
SSS=SSS[::-1,:]
#interpolate the SSS values to be on same 0.5x0.5 grid as ERA-5
nan_map = np.zeros_like(SSS)
nan_map[ np.isnan(SSS) ] = 1
filled_z=SSS.copy()
filled_z[np.isnan(SSS)]=0
f = interpolate.interp2d(SSS_lon,SSS_lat,filled_z,kind='linear')
f_nan=interpolate.interp2d(SSS_lon,SSS_lat,nan_map,kind='linear')
tmp=f(era_waves_lon,era_waves_lat)
nan_new=f_nan(era_waves_lon,era_waves_lat)
tmp[nan_new>0.5]=np.nan
tmp=tmp[::-1,:]
SSS_interp=tmp
else:
fname=direc[file]
ds=xr.open_dataset(fname)
tmp=ds['sss'].values
tmp=np.squeeze(tmp)
tmp=tmp[::-1,:]
#interpolate the SSS values to be on same 0.5x0.5 grid as ERA-5
nan_map = np.zeros_like(tmp)
nan_map[ np.isnan(tmp) ] = 1
filled_z=tmp.copy()
filled_z[np.isnan(tmp)]=0
f = interpolate.interp2d(SSS_lon,SSS_lat,filled_z,kind='linear')
f_nan=interpolate.interp2d(SSS_lon,SSS_lat,nan_map,kind='linear')
tmp2=f(era_waves_lon,era_waves_lat)
nan_new=f_nan(era_waves_lon,era_waves_lat)
tmp2[nan_new>0.5]=np.nan
tmp2=tmp[::-1,:]
SSS_interp=np.stack([SSS_interp,tmp2],axis=2)
答: 暂无答案
评论
tmp2=tmp[::-1,:]
tmp2=tmp2[::-1,:]