? ? 首先生成一個(gè)主對角全為1的其余全為0的矩陣,比如有n個(gè)分類就是n * n,效果如下:
? ? 隨后根據(jù)標(biāo)簽列表(或者numpy數(shù)組)選取合適的行,比如標(biāo)簽是[9, 1, 0, 0], 那么就會(huì)選擇上圖矩陣中對應(yīng)的9、1、0、0行,得到one_hot標(biāo)簽,如果不熟悉numpy數(shù)組的列表切片的(就是說numpy_array[slice]中的slice是列表)?,可以看下這篇Python Numpy數(shù)組使用列表索引
? ? 恢復(fù)的話就是找列表中為1的下標(biāo)即可。
? ? 代碼如下:
# encoding = utf-8
'''
author : James-J
time : 2019/05/29
'''
import numpy as np
if __name__ == '__main__':
one_hot = np.eye(10) # 10*10的矩陣 對角線上是1
print('np.eye(10)\n', one_hot)
# 兩種方法 傳一維的numpy數(shù)組和列表都可以
label = np.array([1, 4, 8, 9, 5, 0])
one_hot_label = one_hot[label.astype(np.int32)] # 表示選取矩陣上面的第幾行
# label = [1, 4, 8, 9, 5, 0]
# one_hot_label = one_hot[label]
print('-----------------one_hot--------------------')
print(one_hot_label)
label = [one_label.tolist().index(1) for one_label in one_hot_label] # 找到下標(biāo)是1的位置
print('------------------label---------------------')
print(label)
? ? 得到的結(jié)果:
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
