创建数组

  1. #定值
  2. x=torch.Tensor([[1,2,3],[4,5,6]])
  3. #0数组
  4. x=torch.zeros(2,3)
  5. #1数组
  6. x=torch.ones(2,3)
  7. #随机数组,相当于np.random.randn(2,3)
  8. x=torch.randn(2,3)
  9. # 创建'空'数组
  10. x=torch.empty(2,3)
  11. # 复制指定的形状与类型,值全是1
  12. x1=torch.ones_like(x)

数组运算

  1. #计算 使用方法后加“_”,自身值变化
  2. x.add_(1)
  3. #矩阵运算
  4. #矩阵相乘
  5. x.mm(y)
  6. torch.mm(x,y)
  7. #相当于numpy的matmul(matrix multiply ) :
  8. np.matmul(x,y) /
  9. #dot用于向量的点乘计算,计算结果为一个数字
  10. x.dot(y)
  11. #两种方式结果相同
  12. torch.doc(x,y)
  13. #相当于np中:
  14. np.doc(x,y)

数组内数据类型转换

  1. x=torch.tensor([1.2],dtype=float)
  2. #将x内数据均转为long
  3. x.long()

Shape相关

  1. x=torch.ones([2,3])
  2. #获取Shape 对于Tensor,两种方式相同
  3. x.shape
  4. x.size()
  5. #相当于numpy的reshape
  6. x.view(3,2)
  7. #后边-1代表系统自动推算
  8. x.view(3,-1)
  9. # 切片
  10. #与numpy相同,相当于pandas中的iloc[1,1:2]
  11. #取第2行,与2-3列(从0开始索引)
  12. x[1,1:2]
  13. #取第2行,所有列
  14. x[1,:]

item()取值

  1. # 取出指定位置的数值
  2. x[1][2].item()

与numpy转换

注意:转换后的两个变量,共享内存空间,共同变化!

  1. # torch->numpy
  2. x=torch.ones(2,3)
  3. arr=x.numpy()
  4. #numpy-> torch
  5. arr=np.ones([2,3])
  6. x=torch.from_numpy(arr)
  7. #注意:转换后的两个变量(x与arr),共享内存空间,共同变化!
  8. #举例: 讲x进行+1操作后,arr的值也发生同样变化.(注意是add_())
  9. x=x.add_(1)
  10. print(arr)
  11. #注意例外: x=x+1,相当于x重新指向新的地址,因此arr不会变化!
  12. x=x+1
  13. print(arr)

设备转换,指定设备计算

  1. #查看gpu是否可用
  2. torch.cuda.isavailable()
  3. #引用gpu
  4. device=torch.device("cuda")
  5. #将tensor放到gpu 以下两种方式相同
  6. x=x.cuda()
  7. x=x.to(device)
  8. #将tensor放到gpu上计算(指定设备)
  9. y=tensor.ones_like(x,device=device)
  10. #使用gpu计算,保证两个tensor都在gpu上直接执行即可
  11. x+y
  12. #注意,numpy相关的操作必须转回cpu才可以执行
  13. #转回cpu
  14. y=y.to("cpu")
  15. #将x暂时转到cpu计算
  16. t=x.cpu().data.numpy()