假设我们有一个 2D numpy 数组,我们使用 np.ma.masked_where 来屏蔽一些元素。在每一行中,我们希望将所有被屏蔽的元素移动到末尾,同时保留其余元素的顺序。有没有一种简单的无循环方式来做到这一点?
例如,假设我们有以下带掩码的 2D 矩阵:
a = [1, --, 2
4, 3, --
--, --,5]
我们想返回:
a = [1, 2, --
4, 3, --
5,--, --]
假设我们有一个 2D numpy 数组,我们使用 np.ma.masked_where 来屏蔽一些元素。在每一行中,我们希望将所有被屏蔽的元素移动到末尾,同时保留其余元素的顺序。有没有一种简单的无循环方式来做到这一点?
例如,假设我们有以下带掩码的 2D 矩阵:
a = [1, --, 2
4, 3, --
--, --,5]
我们想返回:
a = [1, 2, --
4, 3, --
5,--, --]
我没有发现任何 ma 函数可以实现这一点,但我认为您可以先对掩码数组执行排序
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)