Scipy Interp2d 在循环期间第二次不工作?

Scipy Interp2d not working the second time during loop?

提问人:Shayma 提问时间:11/15/2023 更新时间:11/15/2023 访问量:12

问:

我有一个包含 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)
插值

评论

0赞 Michael Butscher 11/15/2023
我想这实际上应该是tmp2=tmp[::-1,:]tmp2=tmp2[::-1,:]

答: 暂无答案