您的x
为3x2:
In [379]: x
Out[379]:
array([[1, 2],
[2, 3],
[3, 4]])
创建一个由3个布尔元素组成的掩码:
In [380]: rowmask=np.array([False,False,True])
它可以用于选择True或False的行。在两种情况下,结果都是二维的:
In [381]: x[rowmask,:]
Out[381]: array([[3, 4]])
In [382]: x[~rowmask,:]
Out[382]:
array([[1, 2],
[2, 3]])
这是不使用MaskedArray子类的情况。要创建这样的数组,我们需要一个与x
形状匹配的掩码。目前还没有提供只屏蔽一个维度的功能。
In [393]: xmask=np.stack((rowmask,rowmask),-1) # column stack
In [394]: xmask
Out[394]:
array([[False, False],
[False, False],
[ True, True]], dtype=bool)
In [395]: np.ma.MaskedArray(x,xmask)
Out[395]:
masked_array(data =
[[1 2]
[2 3]
[
mask =
[[False False]
[False False]
[ True True]],
fill_value = 999999)
应用
compressed
函数后,会产生一个扁平化的数组:
array([1, 2, 2, 3])
。
由于遮盖是逐个元素进行的,它可以遮盖一行中的一个元素、两行中的两个元素等。因此,通常情况下,删除被遮盖的元素不会得到二维数组,只能得到扁平化的形式。
当有分散的屏蔽值时,使用
np.ma
最合适,如果您想选择或取消选整行或整列,则没有太大帮助。
===============
以下是更典型的带有屏蔽数组:
In [403]: np.ma.masked_inside(x,2,3)
Out[403]:
masked_array(data =
[[1 --]
[-- --]
[-- 4]],
mask =
[[False True]
[ True True]
[ True False]],
fill_value = 999999)
In [404]: np.ma.masked_equal(x,2)
Out[404]:
masked_array(data =
[[1 --]
[-- 3]
[3 4]],
mask =
[[False True]
[ True False]
[False False]],
fill_value = 2)
In [406]: np.ma.masked_outside(x,2,3)
Out[406]:
masked_array(data =
[[-- 2]
[2 3]
[3 --]],
mask =
[[ True False]
[False False]
[False True]],
fill_value = 999999)
np.where
是一个节省代码行数的好工具! - Artashes