1.算术操作
1.加法
x = torch.rand(5, 3)
y = torch.rand(5, 3)
#【1】直接+
print(x + y)
#【2】add函数
print(torch.add(x, y))
result = torch.empty(5, 3)
torch.add(x, y, out=result)#指定输出
print(result)
#【3】add_覆盖函数
y.add_(x)
print(y)
#注:PyTorch操作inplace版本都有后缀_, 例如x.copy_(y), x.t_()
2.索引
索引出来的结果与原数据共享内存,也即修改一个,另一个会跟着修改。
x = torch.rand(5, 3)
y = torch.rand(5, 3)
#【1】普通索引
y = x[0, :]
y += 1
print(y)
print(x[0, :]) # 源tensor也被改了
#【2】在指定维度上选取
index_select(input, dim, index)#选取某些行、某些列
#【3】条件选取
masked_select(input, mask)#a[a>0],使用ByteTensor进行选取
#【4】非0元素的下标
nonzero(input)
#【5】根据index,在dim维度上选取数据
gather(input, dim, index)#输出的size与index一样
3.改变形状
1.用view()
来改变Tensor的形状。
-
注意view()返回的新Tensor与源Tensor虽然可能有不同的size,但是是
共享data
的,也即更改其中的一个,另外一个也会跟着改变。(顾名思义,view仅仅是改变了对这个张量的观察角度,内部数据并未改变) -
虽然view返回的Tensor与源Tensor是共享data的,但是依然是一个新的Tensor(因为Tensor除了包含data外还有一些其他属性),二者id(内