假设我们有一个2D numpy数组,并且我们使用np.ma.masked_where遮罩了某些元素。在每一行中,我们都希望将所有被遮罩的元素移到最后,同时保留其余元素的顺序。有没有一种简单的无循环方法?
例如,假设我们有以下蒙版2D矩阵:
a = [1, --, 2
4, 3, --
--, --,5]
我们要返回:
a = [1, 2, --
4, 3, --
5,--, --]
答案 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)