python label与one-hot之间的互相转换方式

 更新时间:2023年02月01日 08:37:24   作者:强殖装甲凯普  
这篇文章主要介绍了python label与one-hot之间的互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

label与one-hot之间的互相转换

有时候需要label,比如强化学习的离散动作空间,输出动作索引;有时候需要one-hot,比如训练数据或者输入上一个状态的动作,简单的互相转换还是重要的。

label 转 one-hot

通过 np.eye(action_dims)[actions] 快速生成:

>>> import numpy as np
>>> label = [1,2,2,3]
>>> np.eye(4)[label]
array([[0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

one-hot 转label

numpy可以通过 np.argmax(onehot, 1) 实现,pytorch 可以通过 torch.topk(one_hot, 1)[1].squeeze(1) 实现:

>>> import torch
>>> onehot
array([[0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
>>> np.argmax(onehot,1)
array([1, 2, 2, 3], dtype=int64)
>>> torch.topk(torch.tensor(onehot), 1)[1].squeeze(1)
tensor([1, 2, 2, 3])

label:one-hot 与 标量转化

标量 转化为 one-hot 向量

from keras.utils import to_categorical

data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]
encoded = to_categorical(data)
print("encoded:", encoded)

输出:

encoded: [[0. 1. 0. 0.]
             [0. 0. 0. 1.]
             [0. 0. 1. 0.]
             [1. 0. 0. 0.]
             [0. 0. 0. 1.]
             [0. 0. 1. 0.]
             [0. 0. 1. 0.]
             [0. 1. 0. 0.]
             [1. 0. 0. 0.]
             [0. 1. 0. 0.]]

one-hot向量 转化为 标量

因为一个热向量是一个包含0和1的向量,所以可以这样做:

encoded = np.array([[0, 1, 0, 0],
                    [0, 0, 0, 1],
                    [0, 0, 1, 0],
                    [1, 0, 0, 0],
                    [0, 0, 0, 1],
                    [0, 0, 1, 0],
                    [0, 0, 1, 0],
                    [0, 1, 0, 0],
                    [1, 0, 0, 0],
                    [0, 1, 0, 0]])

data = [np.where(r == 1)[0][0] for r in encoded]
print("data:", data)

输出:

data: [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python 基础教程之str和repr的详解

    Python 基础教程之str和repr的详解

    这篇文章主要介绍了Python 基础教程之str和repr的详解的相关资料,主要说明他们之家的区别,通过此文希望能帮助到大家,帮助大家理解这部分内容,需要的可以参考下
    2017-08-08
  • 浅析Python中的缩进错误

    浅析Python中的缩进错误

    在编程中,我们经常会遇到错误,缩进错误是 Python 中最常见的错误之一,它会使我们的代码难以理解,并且难以调试,下面小编就来和大家简单聊聊Python中的缩进错误吧
    2023-10-10
  • Django REST为文件属性输出完整URL的方法

    Django REST为文件属性输出完整URL的方法

    这篇文章主要给大家介绍了关于Django REST如何为文件属性输出完整URL的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-12-12
  • Django记录操作日志与LogEntry的使用详解

    Django记录操作日志与LogEntry的使用详解

    我们既知道如何记录变更日志,也知道如何获取变更日志,那么如何才能够在admin后台方便地查看操作日志呢?这篇文章主要给大家介绍了关于Django记录操作日志与LogEntry使用的相关资料,需要的朋友可以参考下
    2022-01-01
  • Python 异步协程函数原理及实例详解

    Python 异步协程函数原理及实例详解

    这篇文章主要介绍了Python 异步协程函数原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • python pycharm最新版本激活码(永久有效)附python安装教程

    python pycharm最新版本激活码(永久有效)附python安装教程

    PyCharm是一个多功能的集成开发环境,只需要在pycharm中创建python file就运行python,并且pycharm内置完备的功能,这篇文章给大家介绍python pycharm激活码最新版,需要的朋友跟随小编一起看看吧
    2020-01-01
  • python实现上传样本到virustotal并查询扫描信息的方法

    python实现上传样本到virustotal并查询扫描信息的方法

    这篇文章主要介绍了python实现上传样本到virustotal并查询扫描信息的方法,是比较实用的技巧,需要的朋友可以参考下
    2014-10-10
  • 如何利用pandas工具输出每行的索引值、及其对应的行数据

    如何利用pandas工具输出每行的索引值、及其对应的行数据

    这篇文章主要介绍了如何利用pandas工具输出每行的索引值、及其对应的行数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python中列表(List) 的三种遍历(序号和值)方法小结

    Python中列表(List) 的三种遍历(序号和值)方法小结

    这篇文章主要介绍了Python中列表(List) 的三种遍历(序号和值)方法小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 通过 for 循环比较 Python 与 Ruby 的编程区别

    通过 for 循环比较 Python 与 Ruby 的编程区别

    这篇文章主要介绍了通过 for 循环比较 Python 与 Ruby 的编程区别,Ruby 与 Python 之间的差异在很大程度上可通过for循环看出本质,下文详细介绍需要的小伙伴可以参考一下
    2022-05-05

最新评论