代码验证
请看如下代码:
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数组。