这些创建方法都可以在创建的时候指定数据类型dtype和存放device(cpu/gpu)。
1.2 操作
1.2.1 算术操作
在PyTorch中,同⼀种操作可能有很多种形式,下⾯面⽤用加法作为例子。
# 形式1:y = torch.rand(5,3)print(x+y)
# 形式2print(torch.add(x,y))# 还可以指定输出result = torch.empty(5, 3)torch.add(x, y, out=result)print(result)
# 形式3y.add_(x)print(y)
1.2.2 索引
我们还可以使⽤类似NumPy的索引操作来访问 Tensor 的一部分,需要注意的是:索引出来的结果与原数据共享内存,也即修改⼀个,另⼀个会跟着修改。
y = x[0,:]y += 1print(y)print(x[0,:]) # 观察x是否改变了
1.2.3 改变形状
注意 view 返回的新tensor与源tensor共享内存(其实是同⼀个tensor),也即更改其中的⼀个,另 外⼀个也会跟着改变。(顾名思义,view仅是改变了对这个张量的观察角度)
y = x.view(15)z = x.view(-1,5) # -1所指的维度可以根据其他维度的值推出来print(x.size,y.size,z.size)
x += 1print(x)print(y)
所以如果我们想返回⼀个真正新的副本(即不共享内存)该怎么办呢?Pytorch还提供了⼀ 个 reshape 可以改变形状,但是此函数并不能保证返回的是其拷贝,所以不推荐使用。推荐先 ⽤ clone 创造一个副本然后再使⽤ view 。
x_cp = x.clone.view(15)x -= 1print(x)print(x_cp)
另外⼀个常用的函数就是 item , 它可以将⼀个标量 Tensor 转换成⼀个Python
number:x = torch.randn(1)print(x)print(x.item)