详解pytorch中的常见的Tensor数据类型以及类型转换

本文详细介绍了PyTorch中Tensor的四种基本数据类型:float32、float64、int32和int64,以及如何通过torch.FloatTensor、torch.DoubleTensor、torch.IntTensor和torch.LongTensor构建它们。此外,还提到了torch.Tensor的类型转换方法,如long()和type(torch.int64)。同时,文章讨论了不同类型之间的转换,并提供了将Tensor与其他数据结构(如list和numpy数组)相互转换的示例。最后,简要提及了GPU上Tensor的使用和与CPU间的转换。

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

概览

本文主要讲pytorch中的常见的Tensor数据类型,例如:float32float64int32int64。构造他们分别使用如下函数:torch.FloatTensor()torch.DoubleTensor(), torch.IntTensor(), torch.LongTensor()

Tensor的构建

1.32-bit floating point:

a=torch.FloatTensor([1.0,3.0])#a=torch.Tensor([1.0,3.0])和前面等价
print(a.dtype)
#torch.float32

2.64-bit floating point

a=torch.DoubleTensor([1,3])
print(a.dtype)
#torch.float64

3.32-bit integer (signed)

a=torch.IntTensor([1,3])
print(a.dtype)
#torch.int32

4.64-bit integer (signed)

a=torch.LongTensor([1,3])
print(a.dtype)
#torch.int64

补充

type(a)
#torch.Tensor

torch.Tensor作为一个对象,你创建的所有Tensor,不管是什么数据类型,都是torch.Tensor类,其所有元素都只能是单一数据类型。即:

A torch.Tensor is a multi-dimensional matrix containing elements of a single data type

即使你给的数据有多种类型,其会自动转换。比如:

a=torch.LongTensor([1,3.1])
print(a.dtype)
#torch.int64
a
#tensor([1, 3])

除了用上述构建方法构建torch.Tensor之外,还可以用torch.tensor()来构建,我个人比较喜欢这个,因为其功能更加强大。上面那种torch.xxxTensor()的方式要记好几种,这里有像numpy那样的dtype参数直接指定,可以看作是前面的升级版吧。

a=torch.tensor([1,3.1],dtype=torch.int32)#指定是哪种数据类型就是哪种。
print(a.dtype)
#torch.int32
a
tensor([1, 3], dtype=torch.int32)

本节最后,上面4中数据类型一般够用,其他还有torch.int8,torch.uint8,torch.bool。如果不够?可以参考:
https://pytorch.org/docs/stable/tensors.html
在这里插入图片描述

类型转换

下面会介绍两种方法:long()type(torch.int64),显然后者比较容易记住,是我比较喜欢的。

a=torch.tensor([1,2],dtype=torch.int32)
print(a)
b=a.long()
print(b)
print(b.dtype)
c=a.type(torch.int64)
print(c)
print(c.dtype)
print(a)

在这里插入图片描述
有人会疑惑,为什么第二行输出没有显示dtype=,因为默认就是torch.int64

附录

list,numpy,tensor之间相互转换的方法:

a=[[1,2],[3,4]]#list
print(a)
b=np.array(a)#list->numpy
print(b)
c=torch.tensor(a)#list->tensor
print(c)
print(b.tolist())#numpy->list
print(c.tolist())#tensor->list
print(torch.tensor(b))#numpy->tensor
print(torch.from_numpy(b))#同上
print(c.numpy())#tensor->numpy

在这里插入图片描述
对了,温馨提示,tensor可以在GPU上运行,其他两个都不可以,这就是为什么你用GPU运行的时候有时会报不是tensor的错误,必须先转化为tensor。
还有,GPU上的tensor不能直接转为numpy,需要先放到CPU上。

a=a.cpu()#放到CPU
a.numpy()#这才对。

放回GPU上?

a=a.cuda()#放到GPU

当然啦,cuda(),cpu()还有一种写法:

device=torch.device("cpu")#torch.device("cuda")
a=torch.tensor([1,2])
a.to(device)#放到CPU

完结撒花
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

音程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值