如何追加掩码数组

5

我有两个数组,想把它们合并成一个新的数组,但需要保留掩码信息。我尝试使用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 = [-- 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.vstacknp.hstack会发生什么? - Paul H
与附加相同,丢失掩码信息。 - CJJ
2个回答

2

这的确非常奇怪,即使使用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_value0,如果有需要的话。

1
尝试使用掩码类追加: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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接