import torch
# pytorch中的torch(张量)类似于numpy中的 ndarray
# torch 支持GUP 支持微分 更适合深度学习
# x = torch.arange(12);
# print(x.shape) #torch的形状
# print(x.numel()) #torch元素的数量
#
# x = x.reshape(3,4); #将x从行向量转成矩阵
# x = x.reshape(-1,4) #通过-1来调用此自动计算出维度的功能
#1.pytorch 的数学运算 元素计算
# x = torch.tensor([1.0, 2, 4, 8])
# y = torch.tensor([2, 2, 2, 2])
# print(torch.exp(x))
# 2.线性代数: 向量点积和矩阵乘法
# x = torch.tensor([1.0,2,4,8])
# x = torch.arange(12,dtype = torch.float32).reshape((3,4));
# y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
# print(torch.cat((x,y),dim=0))
# print(torch.cat((x,y),dim=1))
# print(x == y)
# print(torch.sum(x))
# 3.广播机制 两个张量的形状不同,通过调用广播机制,通过转换,使两个张量具有相同的形状
# a = torch.arange(3).reshape((3, 1))
# b = torch.arange(2).reshape((1, 2))
# print(a+b) #先将两个矩阵扩成两个相同的矩阵进行加减
#4.索引和切片
# x = torch.arange(12,dtype = torch.float32).reshape((3,4));
# print(x[-1]);
# print(x[1:3]);
#
# x[1,2] =9;
# print(x)
#5.节省空间 Y = X + Y 取消引用Y指向的张量,指向了新分配的内存的内存处的张量
# x = torch.arange(12,dtype = torch.float32).reshape((3,4));
# y = torch.arange(12,dtype = torch.float32).reshape((3,4));
# z = torch.zeros_like(x)
# print(id(z))
#使用切片操作使空间地址保持不变
# z[:] = x + y;
# print(id(z))
# 使用 x += y 来操作
#6.转换成其他python对象
#将pytorch中的tensor转换成NumPy中的ndarray
# x = torch.arange(12,dtype = torch.float32).reshape((3,4));
# A = x.numpy();
# B = torch.tensor(A);
# print(type(A),type(B))
#7.将大小为1的张量转换成Python标量 可以调用item函数或者Python的内置函数
# a = torch.tensor([3.5])
# print(a.item());
# print(float(a));
# print(int(a))