本文内容分为以下两个部分:
代码验证
结论
代码验证
请看如下代码:
import torch import numpy as np data = np.array([1,2,3]) t1 = torch.Tensor(data) t2 = torch.tensor(data) t3 = torch.as_tensor(data) t4 = torch.from_numpy(data) print(t1) print(t2) print(t3) print(t4)
输出的结果是:
tensor([1.,2.,3.]) tensor([1,2,3],dtype=torch.int32) tensor([1,2,3],dtype=torch.int32) tensor([1,2,3],dtype=torch.int32)
再输入以下语句查看类型:
print(t1.dtype) print(t2.dtype) print(t3.dtype) print(t4.dtype)
输出的结果是:
torch.float32 torch.int32 torch.int32 torch.int32
接着,修改numpy数组data的值,输入代码如下:
data[0] = 0 data[1] = 0 data[2] = 0 print(t1) print(t2) print(t3) print(t4)
输出后发现仅有t3,t4的值被改变了,说明as_tensor和from_numpy的张量是和numpy数组共用的存储空间,也可以称为“share data”。
结论
| 特性 | Tensor | tensor | as_tensor | from_numpy |
|---|---|---|---|---|
| 是否与numpy共用存储 | 否 | 否 | 是 | 是 |
| 是否属于factory function | 否 | 是 | 是 | 是 |
| 深度学习适用场景 | / | 写代码常用 | 优化性能使用 | 优化性能使用 |
注:
(1) factory function是“先判断输入数据类型,后按照相应类型存储”的函数,而Tensor是一个构造函数;
(2) 优化程序性能时通常选用as_tensor而不是from_numpy,因为后者只接受numpy数组。



