将掩码值移到2D python数组的末尾?

时间:2018-08-08 23:16:51

标签: python arrays sorting bit-shift masked-array

假设我们有一个2D numpy数组,并且我们使用np.ma.masked_where遮罩了某些元素。在每一行中,我们都希望将所有被遮罩的元素移到最后,同时保留其余元素的顺序。有没有一种简单的无循环方法?

例如,假设我们有以下蒙版2D矩阵:

a = [1, --, 2
     4, 3, --
     --, --,5]

我们要返回:

a = [1, 2, --
     4, 3, --
     5,--, --]

1 个答案:

答案 0 :(得分:0)

我发现没有任何ma函数可以实现此目的,但是我认为您可以首先对mask数组执行排序

a = np.arange(9).reshape(3, 3)
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

np.ma.masked_where(a % 2 == 0, a)
masked_array(data =
 [[-- 1 --]
 [3 -- 5]
 [-- 7 --]],
             mask =
 [[ True False  True]
 [False  True False]
 [ True False  True]],
       fill_value = 999999)


a = a[np.arange(a.shape[0]).reshape(-1, 1), np.argsort(a % 2 == 0, axis=1, kind='mergesort')]
array([[1, 0, 2],
       [3, 5, 4],
       [7, 6, 8]])

np.ma.masked_where(a %2 == 0, a)
masked_array(data =
 [[1 -- --]
 [3 5 --]
 [7 -- --]],
             mask =
 [[False  True  True]
 [False False  True]
 [False  True  True]],
       fill_value = 999999)