Numpy判斷某維度是否相同

2021-10-09 14:07:36 字數 2395 閱讀 8544

語義分割(semantic segmentation)領域深度學習的label預處理工作中,要把3通道的label資料轉為單通道的mask作為訓練樣本。

例如把一堆黑色和紅色的畫素,轉為全是0和1的單通道 mask。

最normal的處理流程為:

判斷畫素的顏色;

根據顏色賦值對應的label。

那麼在步驟一中,就要判斷 label 的 channel 維度(例如shape為(480, 1280, 3),則channel維度為最後的3)和 color是否相同。

假設 label 大小為 4 x 4,3個顏色通道:

color_mask = np.random.randint(0,

10,(4

,4,3

))print

(color_mask)

"""array([[[4, 1, 8],

[7, 8, 0],

[1, 8, 7],

[9, 2, 0]],

[[4, 8, 5],

[7, 6, 6],

[6, 5, 5],

[2, 7, 4]],

[[9, 2, 1],

[3, 7, 6],

[9, 4, 7],

[5, 9, 1]],

[[1, 9, 8],

[6, 7, 9],

[2, 9, 5],

[3, 3, 5]]])

"""print

(color_mask.shape)

"""(4, 4, 3)"""

初始化 color :

color = np.array([3

,3,5

])print

(color)

"""array([3, 3, 5])"""

基於 numpy 的矩陣特性,可以以矩陣為單位進行條件判斷:

res = color_mask == color

print

(res)

"""array([[[false, false, false],

[false, false, false],

[false, false, false],

[false, false, false]],

[[false, false, true],

[false, false, false],

[false, false, true],

[false, false, false]],

[[false, false, false],

[ true, false, false],

[false, false, false],

[false, false, false]],

[[false, false, false],

[false, false, false],

[false, false, true],

[ true, true, true]]])

"""

觀察到以上結果是在最後一維進行判斷的。

使用np.all(),即可把 4x4x3 維度的布林條件對映到 4x4 的結果中。

其中axis=n指定在第 n 維度上判斷:

np.

all(res, axis=-1

)"""

array([[false, false, false, false],

[false, false, false, false],

[false, false, false, false],

[false, false, false, true]])

"""

最後在預先初始化好的矩陣上賦值即可:

encode_mask = np.zeros(color_mask.shape[:2

], dtype=np.

long

)encode_mask[np.

all(res, axis=-1

)]=1

print

(encode_mask)

"""array([[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 1]])

"""

以上為使用 numpy 判斷某維度是否相同的方法。

判斷陣列是否存在某元素

查詢乙個元素是否在陣列中,一共有上面三種做法 in array 函式在陣列中搜尋給定的值。in array value,array,type type 可選。如果設定該引數為 true,則檢查搜尋的資料與陣列的值的型別是否相同。array key exists array key exists 函式...

js判斷某html元素是否存在

今天想在html中找到時候有table標籤,用jquery查詢var table table 但是怎麼判斷時候table存在呢,直接alert table 返回object,判斷if table 也是true,突然想到了document.getelementsbyname 得到的其實是乙個陣列,於是...

python中判斷某變數是否存在

bin python def fn try a 0b open 1.py raise 11 這個異常不是必然發生,我這裡只是假設 c open 2.py except if b b.close if c c.close if name main fn 這段程式執行時可能會拋異常,所以我想在excep...