看看np.percentile
代碼,很明顯它沒有什麼特別的掩碼數組。
def percentile(a, q, axis=None, out=None,
overwrite_input=False, interpolation='linear', keepdims=False):
q = array(q, dtype=np.float64, copy=True)
r, k = _ureduce(a, func=_percentile, q=q, axis=axis, out=out,
overwrite_input=overwrite_input,
interpolation=interpolation)
if keepdims:
if q.ndim == 0:
return r.reshape(k)
else:
return r.reshape([len(q)] + k)
else:
return r
凡_ureduce
和_percentile
在numpy/lib/function_base.py
限定內部功能。所以真正的行動是更復雜的。
蒙面數組有2種使用numpy函數的策略。一個是fill
- 用無害的值代替蒙面值,例如做sum時爲0,做產品時爲1。另一種是compress
的數據 - 即刪除所有屏蔽值。
例如:
In [997]: data=np.arange(-5,10)
In [998]: mdata=np.ma.masked_where(data<0,data)
In [1001]: np.ma.filled(mdata,0)
Out[1001]: array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [1002]: np.ma.filled(mdata,1)
Out[1002]: array([1, 1, 1, 1, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [1008]: mdata.compressed()
Out[1008]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
這是打算給你想要的percentile
?填充還是壓縮?或者沒有。您需要充分了解百分位數的概念,以瞭解它應該如何應用於蒙面值。
最好使用屏蔽的方法或np.ma功能。許多np函數委託給方法,但不要指望它 – hpaulj