在 Python 循环中迭代屏蔽 3D 数组的奇怪问题
Weird issue masking 3D arrays iteratively in Python loop
我有一个 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
就是我需要的蒙面二维数组。我试过将掩码数组保存到 SIF_test
,然后将其重新保存到 SIF_year[i,:,:]
,但是 SIF_year
看起来又像 SIF_year0
!
一定是我遗漏了一些明显的错误...
我想我已经解决了这个问题,方法是在循环中添加一个额外的步骤,使用 ma.filled
(https://docs.scipy.org/doc/numpy/reference/routines.ma.html) 将 masked
值替换为 np.NaN
:
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)
我有一个 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
就是我需要的蒙面二维数组。我试过将掩码数组保存到 SIF_test
,然后将其重新保存到 SIF_year[i,:,:]
,但是 SIF_year
看起来又像 SIF_year0
!
一定是我遗漏了一些明显的错误...
我想我已经解决了这个问题,方法是在循环中添加一个额外的步骤,使用 ma.filled
(https://docs.scipy.org/doc/numpy/reference/routines.ma.html) 将 masked
值替换为 np.NaN
:
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)