网址:
https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter02_prerequisite/2.2_tensor?id=_222-%e6%93%8d%e4%bd%9c
常用语句考察
x = torch.empty(5, 3)
x = torch.rand(5, 3)
x = torch.zeros(5, 3, dtype=torch.long)
x = torch.tensor([5.5, 3])
x = x.new_ones(5, 3, dtype=torch.float64)
x = torch.randn_like(x, dtype=torch.float)
print(x)
print(x.size())
print(x.shape)
import torch
x = torch.rand(5, 3)
print(x)
print(x + y)
print(torch.add(x, y))
import torch
x = torch.rand(5, 3)
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(x)
print(y)
print(x+y)
print(result)
import torch
x = torch.rand(5, 3)
y.add_(x)
print(y)
https://blog.csdn.net/dake13/article/details/81302450
https://blog.csdn.net/dake13/article/details/81302450
#切片索引 切片是原结构的照片 改变切片中的元素 原结构跟着改变
a = np.arange(15).reshape(5,3)
print(a)
b1 = a[:2,2]
print()
print(b1)
b1[0] = 16
print(a)
import torch
x = torch.rand(5, 3)
print(x)
y = x[0, :]
y += 1
print(y)
print(x[0, :]) # 源tensor也被改了
import torch
y = torch.rand(5, 3)
y = x.view(15)
z = x.view(-1, 5) # -1所指的维度可以根据其他维度的值推出来
print(x.size(), y.size(), z.size())
x += 1
print(x)
print(y) # 也加了1
所以如果我们想返回一个真正新的副本(即不共享data内存)该怎么办呢?Pytorch还提供了一个reshape()可以改变形状,但是此函数并不能保证返回的是其拷贝,所以不推荐使用。推荐先用clone创造一个副本然后再使用view
import torch
x = torch.rand(5, 3)
x_cp = x.clone().view(15)
x -= 1
print(x)
print(x_cp)
使用clone还有一个好处是会被记录在计算图中,即梯度回传到副本时也会传到源Tensor。
import torch
x = torch.randn(1)
print(x)
print(x.item())
线性代数
另外,PyTorch还支持一些线性函数,这里提一下,免得用起来的时候自己造轮子,具体用法参考官方文档。如下表所示:
PyTorch中的Tensor支持超过一百种操作,包括转置、索引、切片、数学运算、线性代数、随机数等等,可参考官方文档。
官方文档
https://pytorch.org/docs/stable/tensors.html