基于已有数据创建tensor
from numpy
a = np.array([2,3,4])
a = torch.from_numpy(a)
print(a) #tensor([2, 3, 4], dtype=torch.int32)
a1 = torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
print(a1) # tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.int32)
from list
a3 = torch.Tensor([1,2,3]) # tensor([1., 2., 3.])
a4 = torch.Tensor((2,3)) # tensor([2., 3.])
a5 = torch.tensor([[1,2],[3,4]]) # tensor([[1, 2], [3, 4]])
a6 = torch.Tensor(1,2) # tensor([[0., 0.]])
a7 = torch.DoubleTensor(1,2) # tensor([[0., 0.]], dtype=torch.float64)
tensor 与 Tensor区别:
- tensor是一个方法,Tensor是一个类,所有的张量方法(tensor(), FloatTensor())都继承它。
- 使用上,tensor只能使用已知数据创建,根据数据自动指定数据类型;Tensor即可以根据数据创建,也可以根据形状创建,同时默认数据数据为float。
- 推荐使用tensor。
基于形状创建tensor,数据随机
b1 = torch.rand(1,2) # tensor([[0.0941, 0.6547]]) 从(0,1)的均匀分布采样
b2 = torch.randn(1,2) #tensor([[ 1.2337, -1.2270]]) 从(0,1)的正态分布采样
b3 = torch.randint(0,10,size=(1,2)) # tensor([[3, 7]]) 指定low high 和size 采样
b4 = torch.arange(0,10,2) #tensor([0, 2, 4, 6, 8]) 指定范围和步长采样
b5 = torch.linspace(0,10,5) #tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000]) 指定范围和采样个数采样
b6 = torch.logspace(start=0,end=4,steps=2,base=2) #tensor([ 1., 16.]) base的指数2^0 2^4,base default 10
b7 = torch.randperm(10) #tensor([5, 0, 6, 8, 9, 7, 3, 2, 1, 4]) 返回0 - n-1的随机排列
特殊tensor
c1 = torch.zeros((1,2)) #tensor([[0., 0.]]) 全0
c2 = torch.ones((1,2)) #tensor([[1., 1.]]) 全1
c3 = torch.eye(2,2) # tensor([[1., 0.],[0., 1.]]) 对角矩阵
c4 = torch.full(size=(1,2),fill_value=10,dtype=torch.float32) #tensor([[10., 10.]]) 制定size value的全value矩阵
c5 = torch.empty((2,2,)) #tensor([[0., 0.], [0., 0.]]) 指定size 创建一个空矩阵
设置数据类型(不涉及类型转换)
# 可以通过的dtype 参数指定表格中的type列所有的数据类型
# 可以通过type()方法查看所有的类型,对应表格中cpu列或者gpu列
d1 = torch.rand((1,2),dtype=torch.float32) # tensor([[0.6211, 0.1567]])
print(d1.type()) # print(d1.type())
d2 = torch.rand((1,2),dtype=torch.float64,device=torch.device('cuda'))
print(d2) # tensor([[0.1526, 0.5732]], device='cuda:0', dtype=torch.float64)
PS:都是参考官网和博客的自行测试,欢迎补充,谢谢大家:)