张量和其他相关类型之间的转化

张量、数组、列表是较为相似的三种类型对象,会涉及到三种对象的相互转化。在张量创建的过程中,torch.tensor()函数可以将数组或列表转化为张量,同样也可以将张量转化为数组或列表。
前面介绍了0维张量的概念,此处将进一步给出零维张量和数值对象的转化方法。
(1).numpy()方法:张量转化为数组

#方法一
t1 = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
#结果为:tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
t1.numpy()
#结果为:array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype = int64)

#方法二,通过np.array()函数直接转化为array
np.array(t1)
#结果为:array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype = int64)

(2).tolist()方法:张量转化为列表

t1.tolist()
#结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

(3).list()方法:张量转化为列表

#方法一
list(t1)
#结果为:[tensor(1), tensor(2), tensor(3), tensor(4), tensor(5), tensor(6), tensor(7), tensor(8), tensor(9), tensor(10)]

注意:此时转化的列表是由一个个零维张量构成的列表,而非张量的数值组成的列表
(4).item()方法:张量转化为数值
一些情况下,需要将最终计算的结果张量转化为单独的数值进行输出,此时需要使用.item()方法来执行。

#方法一
t2 = torch.tensor(1)
t2.item()
#结果为:1

注意:此方法只可使用在零维张量中,即此张量只有一个元素的零维张量
(5)张量的深拷贝
张量与Python 中其他对象类型一样,等号赋值操作实际上是浅拷贝,需要进行深拷贝,则需要使用clone方法。
在这里插入图片描述
注意:此处,t1和t11二者指向相同的对象,而要使得t11不随t1对象改变而改变,则需要对t11进行深拷贝,从而使得t11单独拥有一份对象。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐