将数组赋值给另一个数组后,Python numpy掩码消失

zed5wv10  于 2023-01-26  发布在  Python
关注(0)|答案(1)|浏览(95)

所以我正在处理大地测量数据,并使用掩膜来覆盖没有数据的区域。在这里,我刚刚遇到了一个问题,即试图用地球上不同点的不同时间序列数据来设计一个阵列。实际问题只是当我将单独的点阵列分配给更大的阵列时,掩膜消失了,而我甚至无法重新分配掩膜。
我创建了一个数组,加载数据(1°网格的每日数据,不包括最南端的30°),并将其转置,这样我就可以轻松地查看不同的点:

minmax_0_10T = np.ma.zeros((2,360,150,365))
with np.load("Data/Pythonarrays/1DEG_SM_minmax_SWI_001_SM0_10cm_2015.npz") as npz:
    minmax_0_10T[0] = np.ma.MaskedArray(**npz).T
with np.load("Data/Pythonarrays/1DEG_SM_minmax_SWI_005_SM0_10cm_2015.npz") as npz:
    minmax_0_10T[1] = np.ma.MaskedArray(**npz).T

我有2个要绘制的数据集和4个要查看的不同点

spots_1deg = [[41, 210], [29, 119], [108, 196], [117, 256]]
minmax_0_10_spots = np.ma.zeros((2,4,365))
"""Create array of minmax and gldas spotdata for choice of SWI layer"""
for i in range(len(spots_1deg)):
    for layer_gldas in range(len(gldas_smT)):
        gldas_spots[layer_gldas][i] = gldas_smT[layer_gldas][spots_1deg[i][1]][spots_1deg[i][0]]
        
    """now all different gldas layers of minmax fitting"""
    minmax_0_10_spots[0][i] = minmax_0_10T[0][spots_1deg[i][1]][spots_1deg[i][0]]
    minmax_0_10_spots[1][i] = minmax_0_10T[1][spots_1deg[i][1]][spots_1deg[i][0]]

但是,如果直接比较minmax_0_10T[0][spots_1deg[i][1]][spots_1deg[i][0]]minmax_0_10_spots[0][i],就会发现minmax_0_10_spots数组不再包含掩码(因为掩码到处都是False)。这是如何发生的,为什么会发生?分配每个掩码也不起作用,最后我不得不将minmax_0_10_spots定义为list并填充它,但是也不能将其转换为数组,因为那样面具就会消失。
我已经试着查看了np.ma文档,但我一定是读多了一些东西或者不理解...

zwghvu4y

zwghvu4y1#

由于数组来自load,我无法测试你的代码。如果你构造一些更小的东西会更容易--可以复制粘贴。
下面是对一维数组的一个简单测试:

In [8]: m = np.ma.zeros(5)
In [9]: m
Out[9]: 
masked_array(data=[0., 0., 0., 0., 0.],
             mask=False,
       fill_value=1e+20)

In [11]: m1 = np.ma.masked_array(np.arange(5),[1,0,1,0,1])
In [12]: m1
Out[12]: 
masked_array(data=[--, 1, --, 3, --],
             mask=[ True, False,  True, False,  True],
       fill_value=999999)
In [13]: for i in range(5):m[i]=m1[i]
In [14]: m
Out[14]: 
masked_array(data=[--, 1.0, --, 3.0, --],
             mask=[ True, False,  True, False,  True],
       fill_value=1e+20)

相关问题