Python 如何附加屏蔽数组
我有两个数组,我想将它们附加到一个新数组中,但我需要保留隐藏的信息。我尝试了numpy.append(),但它丢失了隐藏的信息Python 如何附加屏蔽数组,python,numpy,Python,Numpy,我有两个数组,我想将它们附加到一个新数组中,但我需要保留隐藏的信息。我尝试了numpy.append(),但它丢失了隐藏的信息 >>> maska masked_array(data = [-- 1 3 2 1 -- -- 3 6], mask = [ True False False False False True True False False], fill_value = 0) >>> b masked_array(data
>>> maska
masked_array(data = [-- 1 3 2 1 -- -- 3 6],
mask = [ True False False False False True True False False],
fill_value = 0)
>>> b
masked_array(data = [-- 1 3 2],
mask = [ True False False False], fill_value = 0)
>>> np.append(maska,b)
masked_array(data = [0 1 3 2 1 0 0 3 6 0 1 3 2],
mask = False, fill_value = 999999)
这确实非常奇怪,即使是
np.ma.hstack
也不起作用,但您可以通过手动组合遮罩来实现所需的功能:
In [1]: import numpy as np
In [2]: def masked_hstack(tup):
...: return np.ma.masked_array(np.hstack(tup),
...: mask=np.hstack([arr.mask for arr in tup]))
...:
In [3]: a, b = [0, 1, 3, 2, 1, 0, 0, 3, 6], [0, 1, 3, 2]
In [4]: maska, maskb = [np.ma.masked_equal(arr, 0) for arr in a, b]
In [5]: masked_hstack((maska, maskb))
Out[5]:
masked_array(data = [-- 1 3 2 1 -- -- 3 6 -- 1 3 2],
mask = [ True False False False False True True False False True False False
False],
fill_value = 999999)
如果有必要,您还可以将
fill\u值
重写为0
。尝试屏蔽类append:np.ma.append
# make first Array
In[1]: maska = np.ma.array([999, 1,3,2,1, 999, 999, 3, 6],
mask = [True, False, False, False, False, True, True, False, False])
In[2]: maska
Out[2]: masked_array(data=[--, 1, 3, 2, 1, --, --, 3, 6],
mask=[ True, False, False, False, False, True, True, False, False], fill_value=999999)
# make 2nd array
In[3]: b = np.ma.array([999, 1, 3, 2], mask=[True, False, False, False])
In[4]: b
Out[4]: masked_array(data=[--, 1, 3, 2],
mask=[ True, False, False, False], fill_value=999999)
# Now append the two arrays
In[5]: np.ma.append(maska, b)
Out[5]: masked_array(data=[--, 1, 3, 2, 1, --, --, 3, 6, --, 1, 3, 2],
mask=[ True, False, False, False, False, True, True, False,
False, True, False, False, False], fill_value=999999)
np.vstack
或np.hstack
会发生什么?与append相同,会丢失屏蔽信息