Pytorch小技巧:布尔类型(True/False)转换为浮点类型(1.0/0.0)的成长史

文章对比了三种在PyTorch中将布尔类型的tensor转换为浮点类型的方法:列表生成式、torch.where()函数和强制类型转换。结果显示,强制类型转换在执行效率上显著优于其他两种方法,具有最低的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

在深度学习和PyTorch中,数据类型的处理是一个关键环节。我们经常需要应对各种数据类型,包括布尔值(True/False)和浮点数(1.0/0.0)。有时,为了满足特定的计算或操作需求,我们需要将布尔类型的tensor转换为浮点类型或整数类型的tensor。随着编程经验的积累,我们处理此类需求的方式也会不断优化。以下是我不同阶段处理此类需求的代码缩影。

方法1:基于列表生成式

我们可以通过列表生成式 + if-else语句实现将布尔类型的tensor转换为浮点类型/整数类型的tensor。

完整代码

import time

import torch

bool_tensor = torch.tensor([True, False, True])
start_time = time.time()
# 统计10w次,比较三种代码的时间复杂度
for _ in range(100000):
    # 列表生成式
    float_tensor = torch.tensor([1.0 if value else 0.0 for value in bool_tensor])
end_time = time.time()
print(float_tensor, "cost_time: ", end_time - start_time)

运行结果

在这里插入图片描述
可以看出,使用列表生成式处理10w次从布尔类型的tensor转换为浮点类型/整数类型的tensor需求,需要大约1.71s。

方法2:基于torch.where()

我们可以通过torch.where()函数实现将布尔类型的tensor转换为浮点类型/整数类型的tensor。

完整代码

import time

import torch

bool_tensor = torch.tensor([True, False, True])
start_time = time.time()
# 统计10w次,比较三种代码的时间复杂度
for _ in range(100000):
    # torch.where
    float_tensor = torch.where(bool_tensor, 1.0, 0.0)
end_time = time.time()
print(float_tensor, "cost_time: ", end_time - start_time)

运行结果

在这里插入图片描述

可以看出,使用torch.where()处理10w次从布尔类型的tensor转换为浮点类型/整数类型的tensor需求,需要大约0.78s。

方法3:强制类型转换

在某次偶然的尝试下,我发现可以通过强制类型转换实现将布尔类型的tensor转换为浮点类型/整数类型的tensor。

完整代码

import time

import torch

bool_tensor = torch.tensor([True, False, True])
start_time = time.time()
# 统计10w次,比较三种代码的时间复杂度
for _ in range(100000):
    # 类型转换
    float_tensor = bool_tensor.float()
end_time = time.time()
print(float_tensor, "cost_time: ", end_time - start_time)

运行结果

在这里插入图片描述
可以看出,使用强制类型转换处理10w次从布尔类型的tensor转换为浮点类型/整数类型的tensor需求,仅需要大约0.41s。

比较三种方法

方法执行时间(10w次)
列表生成式1.71s
torch.where()0.78s
强制类型转换0.41s

一言以蔽之强制类型转换真香!!!

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高斯小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值