1. 程式人生 > 程式設計 >Python Numpy,mask影象的生成詳解

Python Numpy,mask影象的生成詳解

什麼是掩膜(mask)

在numpy中,有一個模組叫做ma,這個模組幾乎複製了numpy裡面的所有函式,當然底層裡面都換成了對自己定義的新的資料型別MaskedArray的操作。

我們來看最基本的array定義。

An array class with possibly masked values.
Masked values of True exclude the corresponding element from any computation.

MaskedArray是一個可能帶有掩膜資訊的陣列,對於它的任何計算都是隻針對掩膜值為True的數值上的。

Construction::

 x = MaskedArray(data,mask=nomask,dtype=None,copy=False,subok=True,ndmin=0,fill_value=None,keep_mask=True,hard_mask=None,shrink=True,order=None)

這個class的屬性有很多,但是呢,我們只需要關注三個屬性就好了,也就是data,mask和fill_value。其他的屬性很難用到,舉個例子,比如那個hard_mask,這個屬性為True就是指data一旦某些值被掩蓋掉了就真的丟失了。詳細的可以看原始碼註解。這裡不過多介紹。

Parameters
----------
data : array_like
 Input data.
mask : sequence,optional
 Mask. Must be convertible to an array of booleans with the same
 shape as `data`. True indicates a masked (i.e. invalid) data.
fill_value : scalar,optional
 Value used to fill in the masked values when necessary.
 If None,a default based on the data-type is used.

data就不多說了,一個array_like,tuple,list,ndarray都行。

mask是一個只包含True和False的ndarray,它的shape和data一致,這個陣列是讓你指定需要掩蓋的值的,標記為True的資料會被掩蓋掉。被掩蓋的位置會變成 –(這是兩個短橫槓,型別是MaskedConstant )

fill_value是一個標量,當你掩蓋掉一些值之後,如果你想把這些被掩蓋的值換成另外一個值,那麼你就需要用到它。

import numpy.ma as npm
import numpy as np

data = np.random.randint(1,10,size=[1,5,5])
mask = data < 5
arr = npm.array(data,mask=mask)
print(arr)

#[[[6 6 -- 8 --]
# [-- -- -- 6 7]
# [9 -- -- 6 9]
# [-- -- 5 -- 8]
# [6 9 -- 5 --]]]

不過numpy也可以直接對ndarray進行條件運算。

import numpy as np

arr = np.random.randint(1,5])
mask = arr<5
arr[mask] = 0 # 把標記為True的值記為0
print(arr)

#[[[9 9 7 6 0]
# [0 0 6 9 0]
# [8 0 8 5 0]
# [0 5 5 8 9]
# [0 7 0 0 6]]]

以上這篇Python Numpy,mask影象的生成詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。