• 【Pytorch】Tensor基本操作


    一、Tensor概述

    PyTorch里面处理的最基本的操作对象就是Tensor(张量),它表示的是一个多维矩阵,在使用上和numpy是对应的

    Tensor的基本数据类型有五种:

    • 32位浮点型:torch.FloatTensor。pyorch.Tensor()默认的就是这种类型。
    • 64位整型:torch.LongTensor。
    • 32位整型:torch.IntTensor。
    • 16位整型:torch.ShortTensor。
    • 64位浮点型:torch.DoubleTensor。

    二、Tensor张量的定义

    tensor基本定义

    import torch
    from torch import tensor
    # 定义0维Tensor
    a = tensor(10)
    # 定义1维Tensor
    b = torch.IntTensor([1,2,3])
    # 定义2维Tensor
    c = torch.Tensor([[1, 2], [3, 4], [5, 6]])
    # 定义3维Tensor
    d = tensor([[[1, 2], [3, 4], [5, 6]],[[1, 2], [3, 4], [5, 6]]])
    print(a)
    print(b)
    print(c)
    print(d)
    

    输出结果:

    tensor(10)
    tensor([1, 2, 3], dtype=torch.int32)
    tensor([[1., 2.],
            [3., 4.],
            [5., 6.]])
    tensor([[[1, 2],
             [3, 4],
             [5, 6]],
    
            [[1, 2],
             [3, 4],
             [5, 6]]])
    

    获取tensor大小

    # 获取矩阵的大小
    print(d.size())
    print(d.shape)
    

    输出结果

    torch.Size([2, 3, 2])
    torch.Size([2, 3, 2])
    
    获取0维tensor的值
    a.item()
    

    三、生成Tensor

    定义全0的tensor

    # 定义一个53列的全为0的矩阵
    a = torch.zeros(5,3,dtype=torch.double)
    print(a)
    

    输出

    tensor([[0., 0., 0.],
            [0., 0., 0.],
            [0., 0., 0.],
            [0., 0., 0.],
            [0., 0., 0.]], dtype=torch.float64)
    

    定义随机tensor

    # 定义一个53列的随机值矩阵
    x = torch.randn(5, 3)
    print(x)
    

    输出

    tensor([[ 1.3276,  1.0624, -1.3002],
            [-0.8084,  1.0612, -0.9558],
            [ 1.2273, -0.0903, -0.9187],
            [-0.2024,  0.0736, -1.3670],
            [ 2.6466,  0.2927,  0.1307]])
    

    定义未初始化数据的张量

    # 定义未初始化数据的张量
    x = torch.empty(5,3)
    print(x)
    

    输出

    tensor([[1.0286e-38, 1.0653e-38, 1.0194e-38],
            [8.4490e-39, 1.0469e-38, 9.3674e-39],
            [9.9184e-39, 8.7245e-39, 9.2755e-39],
            [8.9082e-39, 9.9184e-39, 8.4490e-39],
            [9.6429e-39, 1.0653e-38, 1.0469e-38]])
    

    # 定义未初始化数据的张量,torch.FloatTensor类型的张量
    x = torch.Tensor(5, 3)
    print(x)
    

    输出

    tensor([[9.9184e-39, 9.0919e-39, 1.0561e-38],
            [4.2246e-39, 1.0286e-38, 1.0653e-38],
            [1.0194e-38, 8.4490e-39, 1.0469e-38],
            [9.3674e-39, 9.9184e-39, 8.7245e-39],
            [9.2755e-39, 8.9082e-39, 9.9184e-39]])
    

    arange方法生成tensor

    # 使用torch.arange()生成张量
    torch.arange(start=0, end = 11, step=2)
    

    输出

    tensor([ 0,  2,  4,  6,  8, 10])
    

    # 在范围内生成固定数量的等间隔张量
    torch.linspace(start = 1, end = 10, steps=5)
    

    输出

    tensor([ 1.0000,  3.2500,  5.5000,  7.7500, 10.0000])
    

    四、Numpy 数据转换

    tensor转numpy格式

    import torch
    import numpy as np
     
    # 定义一个32列的全为0的矩阵
    b = torch.randn((3, 2))
    
    # tensor转化为numpy
    numpy_b = b.numpy()
    print(numpy_b)
    

    输出

    [[-0.27381065  0.43861285]
     [ 1.0121734   0.4847141 ]
     [ 2.6019974  -0.65572333]]
    

    numpy转tensor格式

    # numpy转化为tensor
    numpy_e = np.array([[1, 2], [3, 4], [5, 6]])
    torch_e = torch.from_numpy(numpy_e)
     
    print(numpy_e)
    print(torch_e)
    

    输出

    [[1 2]
     [3 4]
     [5 6]]
    tensor([[1, 2],
            [3, 4],
            [5, 6]], dtype=torch.int32)
    

    五、tenso运算操作

    加法

    import torch
    import numpy as np
    x = torch.Tensor([[1, 2], [3, 4], [5, 6]])
    y= torch.Tensor([[1, 2], [3, 4], [5, 6]])
    print(x + y)
    

    输出

    tensor([[ 2.,  4.],
            [ 6.,  8.],
            [10., 12.]])
    

    print(torch.add(x, y))
    

    输出

    tensor([[ 2.,  4.],
            [ 6.,  8.],
            [10., 12.]])
    

    减法

    x = torch.Tensor([[1, 2], [3, 4], [5, 6]])
    y= torch.Tensor([[1, 2], [3, 4], [5, 6]])
    print(x - y)
    

    输出

    tensor([[0., 0.],
            [0., 0.],
            [0., 0.]])
    

    乘法

    x = torch.Tensor([[1, 2], [3, 4], [5, 6]])
    y= torch.Tensor([[1, 2], [3, 4], [5, 6]])
    print(x * y)
    

    输出

    tensor([[ 1.,  4.],
            [ 9., 16.],
            [25., 36.]])
    

    除法

    x = torch.Tensor([[1, 2], [3, 4], [5, 6]])
    y= torch.Tensor([[1, 2], [3, 4], [5, 6]])
    print(x / y)
    print(torch.div(x, y))
    
    tensor([[1., 1.],
            [1., 1.],
            [1., 1.]])
    tensor([[1., 1.],
            [1., 1.],
            [1., 1.]])
    

    六、tensor维度变换

    # 转成34列的2维tensor
    A = torch.arange(12.0).reshape(3,4)
    A
    

    输出

    tensor([[ 0.,  1.,  2.,  3.],
            [ 4.,  5.,  6.,  7.],
            [ 8.,  9., 10., 11.]])
    

    ## 使用torch.reshape()
    torch.reshape(input = A,shape = (2,-1))
    
    tensor([[ 0.,  1.,  2.,  3.,  4.,  5.],
            [ 6.,  7.,  8.,  9., 10., 11.]])
    

    unsqueeze方法

    ## torch.unsqueeze()返回在指定维度插入尺寸为1的新张量
    A = torch.arange(12.0).reshape(2,6)
    B = torch.unsqueeze(A,dim = 0)
    B.shape
    

    输出

    torch.Size([1, 2, 6])
    

    squeeze方法

    ## torch.squeeze()函数移除所有维度为1的维度
    C = B.unsqueeze(dim = 3)
    print("C.shape : ",C.shape)
    D = torch.squeeze(C)
    print("D.shape : ",D.shape)
    ## 移除指定维度为1的维度
    E = torch.squeeze(C,dim = 0)
    print("E.shape : ",E.shape)
    

    输出

    C.shape :  torch.Size([1, 2, 6, 1])
    D.shape :  torch.Size([2, 6])
    E.shape :  torch.Size([2, 6, 1])
    

    cat方法

    ## 在给定维度中连接给定的张量序列
    A = torch.arange(6.0).reshape(2,3)
    B = torch.linspace(0,10,6).reshape(2,3)
    print(A)
    print(B)
    ## 在0纬度连接张量
    C = torch.cat((A,B),dim=0)
    C
    

    输出

    tensor([[0., 1., 2.],
            [3., 4., 5.]])
    tensor([[ 0.,  2.,  4.],
            [ 6.,  8., 10.]])
    tensor([[ 0.,  1.,  2.],
            [ 3.,  4.,  5.],
            [ 0.,  2.,  4.],
            [ 6.,  8., 10.]])
    

    七、tensor索引

    ## 利用切片和索引获取张量中的元素
    A = torch.arange(12).reshape(1,3,4)
    A
    

    输出

    tensor([[[ 0,  1,  2,  3],
             [ 4,  5,  6,  7],
             [ 8,  9, 10, 11]]])
    

    A[0]
    

    输出

    tensor([[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]])
    

    ## 获取第0维度下的矩阵前两行元素
    A[0,0:2,:]
    

    输出

    tensor([[0, 1, 2, 3],
            [4, 5, 6, 7]])
    

    ## 获取第0维度下的矩阵,最后一行-4~-1A[0,-1,-4:-1]
    

    输出

    tensor([ 8,  9, 10])
    

    八、tensor统计相关的计算

    ## 1维张量的最大值和最小值
    A = torch.tensor([12.,34,25,11,67,32,29,30,99,55,23,44])
    ## 最大值及位置
    print("最大值:",A.max())
    print("最大值位置:",A.argmax())
    ## 最小值及位置
    print("最小值:",A.min())
    print("最小值位置:",A.argmin())
    

    输出

    最大值: tensor(99.)
    最大值位置: tensor(8)
    最小值: tensor(11.)
    最小值位置: tensor(3)
    
  • 相关阅读:
    Java毕业设计之springboot实现疫情防控核酸检测管理系统
    ROS机械臂 Movelt 学习笔记4 | Move Group 接口 Python
    万字详解java接口
    codeArts Snap:辅助你的编程神器
    C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.3 用关系运算符和表达式比较大小
    Elasticsearch的介绍 以及使用python操作es详细步骤
    OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界
    8.2 矢量图层点要素单一符号使用一
    Makefile Npm
    数据挖掘与分析应用:tableau可视化数据分析,仪表盘,折线图,饼图,条形图,地图,散点图,区域图,表格,数据分析引用
  • 原文地址:https://blog.csdn.net/huweiliyi/article/details/126978891