你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的行。在兩種情況下,結果都是2d:
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])
由於掩蔽是通過元素的元素,它可在第2行等中一般compressing
掩模一個元件中的行1,2,從而,在去除被掩蓋的元素,不會產生2d數組。扁平形式是唯一的一般選擇。
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.ma.compressed()'做到了這兩點。 – Anonymous
我也沒有太多關於蒙面的數組,可能與你的水平相同。只是想讓它工作。那麼,如果你試圖刪除元素,我認爲邏輯索引不是一個壞方法。 – Psidom