np.eye()
今天在完成深度學習的相關程式設計作業的時候,發現程式碼中出現了一個關於np.eye()的函式,這個函式的用法非常的簡單,但是在預製的程式碼中,這個函式的用法並非單單製造一個對角矩陣,而是通過其來將一個label陣列,大小為(1,m)或者(m,1)的陣列,轉化成one-hot陣列。例如他可以將類別總數為6的labels=[1,2,3,0,1,1]的陣列轉化成陣列[[0,1,0,0,0,0],[0,0,1,0,0,0],[0,0,0,1,0,0],[0,0,0,0,0,0],[0,1,0,0,0,0],[0,1,0,0,0,0]]這就是所謂的one-hot的形式。
一、np.eye()
函式的原型:numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
返回的是一個二維2的陣列(N,M),對角線的地方為1,其餘的地方為0.
引數介紹:
(1)N:int型,表示的是輸出的行數
(2)M:int型,可選項,輸出的列數,如果沒有就預設為N
(3)k:int型,可選項,對角線的下標,預設為0表示的是主對角線,負數表示的是低對角,正數表示的是高對角。
(4)dtype:資料的型別,可選項,返回的資料的資料型別
(5)order:{‘C’,‘F'},可選項,也就是輸出的陣列的形式是按照C語言的行優先’C',還是按照Fortran形式的列優先‘F'儲存在記憶體中
案例:(普通的用法)
import numpy as np
a=np.eye(3)
print(a)
a=np.eye(4,k=1)
print(a)
a=np.eye(4,k=-1)
print(a)
a=np.eye(4,k=-3)
print(a)
結果展示:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
[[0. 0. 0. 0.]
[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[1. 0. 0. 0.]]
案例:(深度學習中的高階用法,將陣列轉成one-hot形式)
import numpy as np
labels=np.array([[1],[2],[0],[1]])
print("labels的大小:",labels.shape,"\n")
#因為我們的類別是從0-2,所以這裡是3個類
a=np.eye(3)[1]
print("如果對應的類別號是1,那麼轉成one-hot的形式",a,"\n")
a=np.eye(3)[2]
print("如果對應的類別號是2,那麼轉成one-hot的形式",a,"\n")
a=np.eye(3)[1,0]
print("1轉成one-hot的陣列的第一個數字是:",a,"\n")
#這裡和上面的結果的區別,注意!!!
a=np.eye(3)[[1,2,0,1]]
print("如果對應的類別號是1,2,0,1,那麼轉成one-hot的形式\n",a)
res=np.eye(3)[labels.reshape(-1)]
print("labels轉成one-hot形式的結果:\n",res,"\n")
print("labels轉化成one-hot後的大小:",res.shape)
結果:
labels的大小: (4, 1)
如果對應的類別號是1,那麼轉成one-hot的形式 [0. 1. 0.]
如果對應的類別號是2,那麼轉成one-hot的形式 [0. 0. 1.]
1轉成one-hot的陣列的第一個數字是: 0.0
如果對應的類別號是1,2,0,1,那麼轉成one-hot的形式
[[0. 1. 0.]
[0. 0. 1.]
[1. 0. 0.]
[0. 1. 0.]]
labels轉成one-hot形式的結果:
[[0. 1. 0.]
[0. 0. 1.]
[1. 0. 0.]
[0. 1. 0.]]
labels轉化成one-hot後的大小: (4, 3)
---------------------
作者:愛摳腳的coder
來源:CSDN
原文:https://blog.csdn.net/m0_37393514/article/details/81455915
版權宣告:本文為博主原創文章,轉載請附上博文連結!