在NumPy中编写有效的代码以使用掩码进行反向操作

问题描述 投票:1回答:2

首先,我有一个压缩的numpy数组c和一个掩码m,该掩码用于从完整数组a生成c。

我想输出与原始数组a形状相同的重构数组b,但要得到压缩数组的结果。以下代码可实现此目的,但我不知道如何提高效率。任何指导将不胜感激

import numpy as np
a = np.asarray((1, 2, 3, 4, 5, 6, 7, 8, 9))
m = np.array((True,True,True,True,False,False,True,True,True))
c = np.ma.compressed(np.ma.masked_where(m==False, a))

i=0
j=0
b = np.zeros(a.size)
while (i<a.size):
    if (m[i] == True):
        b[i] = c[j]
        j = j+1
    i = i+1
b

其结果是:

array([1., 2., 3., 4., 0., 0., 7., 8., 9.])
python numpy masked-array
2个回答
2
投票

您可以使用布尔索引:

b = np.zeros_like(m, dtype=float) # change dtype to `int` if that's what you want.

b[m] = c

输出

array([1., 2., 3., 4., 0., 0., 7., 8., 9.])

1
投票

您可以尝试,

b = a*m

这应该给您想要的输出。

© www.soinside.com 2019 - 2024. All rights reserved.