您可以使用==
運算符進行廣播。
例如,
In [19]: W = 5
In [20]: H = 8
In [21]: K = 10
創建用於例如p_label
:
In [22]: p_label = np.random.randint(0, K, size=(W, H))
kvals
是簡單地將含有[0,1,...,K-1]的數組:
In [23]: kvals = np.arange(K)
kvals.reshape(-1, 1, 1)
將kvals
轉換爲具有形狀(K, 1,1)。這使用==
到p_label
進行比較。廣播適用,所以比較的結果已經形成(K,W,H)。它是你想要的值的布爾數組。 .astype(int)
將結果轉換爲整數數組。 (您可以刪除,如果一個布爾數組會爲你工作。)
In [24]: label = (p_label == kvals.reshape(-1, 1, 1)).astype(int)
這裏的原p_label
。注意,例如,值0
的位置:
In [25]: p_label
Out[25]:
array([[3, 3, 2, 6, 2, 2, 9, 3],
[1, 8, 1, 1, 4, 3, 7, 8],
[5, 9, 1, 0, 7, 2, 8, 0],
[1, 3, 5, 4, 6, 0, 9, 5],
[5, 7, 2, 0, 6, 4, 5, 3]])
label[0]
處於位置處p_label
是0
1。
In [26]: label[0]
Out[26]:
array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0]])
是'p_label' 4D或2? – hpaulj