1
\ begingroup美元

我有一个2d xarray数据集,我有几个nan值在数据集。这些nan值需要用2d数组中最近的非nan值填充。我怎么做呢?

我试图使我的数据与地球系统模型读取的grid_spec文件一致。强迫数据和grid_spec文件中的着陆点不一致导致模型爆炸。

\ endgroup美元
6
  • 2
    \ begingroup美元 你能发布你目前的代码吗? \ endgroup美元
    - - - - - -Craeft
    2020年4月2日0:31
  • 1
    \ begingroup美元 @ManmeetSIngh,我认为这样可以更好地跟踪SO,而不是这里。 \ endgroup美元
    - - - - - -gansub
    2020年4月2日1:01
  • 1
    \ begingroup美元 查找Numpy .isnan(<你的元素或数组>)。 \ endgroup美元
    - - - - - -user14859
    2020年4月3日9:05
  • \ begingroup美元 或者尝试使用掩码数组(mask where nan) \ endgroup美元
    - - - - - -user14859
    2020年4月3日9:06
  • 1
    \ begingroup美元 你如何定义距离? \ endgroup美元
    - - - - - -斯宾塞
    2020年4月3日13:19

2答案2

2
\ begingroup美元

如果我是您,我会排除NaN值,然后对结果不规则间隔的数据执行网格化。

在Python和SciPy库中已经有了执行此操作的工具

https://scipy-cookbook.readthedocs.io/items/Matplotlib_Gridding_irregularly_spaced_data.html

但是请准确地记录你正在做的步骤和原因。排除数据总是……解读数据。

\ endgroup美元
    -1
    \ begingroup美元

    我可以用下面的函数来做

    Def fill_mismatch(ds_grid_spec, ds_data): ds_data_o = ds_data.copy() count = 0.0 for I in range(ds_grid_spec.shape[0]): for j in range(ds_grid_spec.shape[1]): if ds_grid_spec[I,j]。值> 0.0和(not ds_data[i,j] > 0.0): count = count + 1.0 fill_miss2d(ds_data_o, i,j) if ds_grid_spec[i,j]。值== 0.0 and (not ds_data[i,j].)values == 0.0): count = count + 1.0 ds_data_o[i,j] = 0.0 return ds_data_o def fill_miss2d(ds, lat_i, lon_j): # fist cycle cycle = 1 while True: bl_i, bl_j = lat_i - cycle, lon_j - cycle tr_i, tr_j = lat_i + cycle, lon_j + cycle #左下i如果bl_i < 0: bl_i = 0 #左下j如果bl_j < 0: bl_j = 0 #右上i如果tr_i > ds.lat. cycle形状[0]-1:tr_i = ds.lat。shape[0]-1 #右上j if tr_j > ds.lon。形状[0]-1:tr_j = ds.lon。Shape [0]-1 lats_i = np.arange(bl_i,tr_i) lons_j = np.arange(bl_j,tr_j) for lats_i中的lats_i_idx: for lons_j中的lons_j_idx: if ds[lats_i_idx, lons_j_idx]>0.0: ds[lat_i, lon_j] = ds[lats_i_idx, lons_j_idx] return cycle = cycle + 1

    grid_spec(模块化海洋模型MOM最常用的网格交换文件)有一个变量AREA_LND和文件soiltype。Nc土壤类型多变。这两个变量在划分为海洋的网格点上都有0.0。因此,我们不需要使用fill_miss2d,当不匹配发生时,在grid_spec中遇到海洋,但在soiltype中有陆地。相反,我们直接用0.0填充土壤类型网格点

    完整的笔记本可以在https://github.com/manmeet3591/python_class/blob/master/xarray_tutorial/grid_soiltype.ipynb

    \ endgroup美元

      你的答案

      点击“张贴您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

      这不是你想要的答案?浏览带标签的其他问题问自己的问题