In [6]: a = np.array([1,2,3])
In [7]: idx = np.array([1,0,1], bool)
In [8]: idx
Out[8]: array([ True, False, True])
In [9]: a[idx]
Out[9]: array([1, 3])
仅仅因为您调用了 boolean array mask
,并不意味着它在每个意义上都表现为“掩码”。我故意选择一个不同的名字。是的,我们确实经常调用这样的数组mask
并谈论“屏蔽”,但我们真正在做的是“选择”。操作返回其中为 True的a[idx]
元素。这与使用元组索引相同:a
idx
nonzero
In [13]: np.nonzero(idx)
Out[13]: (array([0, 2]),)
在np.ma
掩码中使用“掩码”的含义,覆盖。
In [10]: mm = np.ma.masked_array(a, mask=idx)
In [11]: mm
Out[11]:
masked_array(data=[--, 2, --],
mask=[ True, False, True],
fill_value=999999)
In [12]: mm.compressed()
Out[12]: array([2])
在显示中,屏蔽值显示为“--”。正如np.ma
文档所说,那些元素被认为是无效的,并将被排除在计算之外。
mm.filled
返回一个数组,其中 'masked' 值被 'fill' 替换:
In [16]: mm.filled()
Out[16]: array([999999, 2, 999999])
我们可以做同样的事情idx
:
In [17]: a[idx] = 999999
In [18]: a
Out[18]: array([999999, 2, 999999])