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基本语法练习实例

    python基本语法练习实例

    下面小编就为大家带来一篇python基本语法练习实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python classmethod装饰器原理及用法解析

    Python classmethod装饰器原理及用法解析

    这篇文章主要介绍了Python classmethod装饰器原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Django如何使用第三方服务发送电子邮件

    Django如何使用第三方服务发送电子邮件

    这篇文章主要介绍了Django如何使用第三方服务发送电子邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python实现图片和base64转换详解

    Python实现图片和base64转换详解

    这篇文章主要介绍了Python实现图片和base64转换详解,Base64是一种二进制到文本的编码方式,如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符,需要的朋友可以参考下
    2024-01-01
  • 如何用 Python 子进程关闭 Excel 自动化中的弹窗

    如何用 Python 子进程关闭 Excel 自动化中的弹窗

    这篇文章主要介绍了如何用 Python 子进程关闭 Excel 自动化中的弹窗,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-05-05
  • Python多线程 Queue 模块常见用法

    Python多线程 Queue 模块常见用法

    Python的Queue模块提供一种适用于多线程编程的FIFO实现。它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个线程可以共用同一个Queue实例。Queue的大小(元素的个数)可用来限制内存的使用
    2021-07-07
  • Python叠加矩形框图层2种方法及效果

    Python叠加矩形框图层2种方法及效果

    这篇文章主要介绍了Python叠加矩形框图层2种方法及效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 源码解读Python中Event事件的使用

    源码解读Python中Event事件的使用

    事件(Event)主要负责多任务之间的同步,这篇文章主要来和大家详细介绍一下它的原理以及简单使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-12-12
  • Anaconda入门使用总结

    Anaconda入门使用总结

    个人尝试了很多类似的发行版,最终选择了Anaconda,因为其强大而方便的包管理与环境管理的功能。该文主要介绍下Anaconda,对Anaconda的理解,并简要总结下相关的操作
    2018-04-04
  • python 表达式和语句及for、while循环练习实例

    python 表达式和语句及for、while循环练习实例

    下面小编就为大家带来一篇python 表达式和语句及for、while循环练习实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论