在Python循环中迭代地屏蔽3D数组的奇怪问题

时间:2018-02-19 17:36:20

标签: python arrays mask

我有一个3D数组,包含10个世界的2D地图。我创建了一个海洋的面具,我正在尝试创建第二个数组,与我的第一个3D数组相同,但是每年都会掩盖海洋。我认为这应该有效:

SIF_year = np.ndarray((SIF_year0.shape))
for i in range(0,SIF_year0.shape[0]): 
    SIF_year[i,:,:] = np.ma.array(SIF_year0[i,:,:], mask = np.logical_not(mask_global_land))

其中SIF_year0是初始3D数组,SIF_year是已屏蔽的版本。但是,SIF_year看起来就像SIF_year0。有趣的是,如果我这样做:

SIF_year = np.ndarray((SIF_year0.shape))
    for i in range(0,SIF_year0.shape[0]): 
        SIF_test = np.ma.array(SIF_year0[i,:,:], mask = np.logical_not(mask_global_land))

然后SIF_test是我需要的蒙版2D数组。我已尝试将屏蔽数组保存到SIF_test,然后将其重新保存到SIF_year[i,:,:],但SIF_year再次看起来像SIF_year0

我一定有一些明显的错误......

1 个答案:

答案 0 :(得分:0)

我想我已经通过在循环中添加一个额外步骤来解决问题,该步骤使用masked np.NaN ma.filled替换SIF_year = np.ndarray((SIF_year0.shape)) for i in range(0,SIF_year0.shape[0]): SIF_test = np.ma.array(SIF_year0[i,:,:], mask = np.logical_not(mask_global_land)) SIF_year[i,:,:] = np.ma.filled(SIF_test, np.nan) {{1}}值:

{{1}}