• Numpy/Pytorch之数据类型与强制转换


    
    

    1.数据类型简介

    Numpy

    NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

    Pytorch

    Torch定义了七种CPU张量类型和八种GPU张量类型,这里我们就只讲解一下CPU中的,其实GPU中只是中间加一个cuda即可,如torch.cuda.FloatTensor:

    • torch.FloatTensor(2,3) 构建一个2*3 Float类型的张量
    • torch.DoubleTensor(2,3) 构建一个2*3 Double类型的张量
    • torch.ByteTensor(2,3) 构建一个2*3 Byte类型的张量
    • torch.CharTensor(2,3) 构建一个2*3 Char类型的张量
    • torch.ShortTensor(2,3) 构建一个2*3 Short类型的张量
    • torch.IntTensor(2,3) 构建一个2*3 Int类型的张量
    • torch.LongTensor(2,3) 构建一个2*3 Long类型的张量

    同样,直接使用类型名很可能会报错,正确的使用方式是torch.调用,eg,torch.FloatTensor()

    2.Python的type()函数

    type函数可以由变量调用,或者把变量作为参数传入。

    返回的是该变量的类型,而非数据类型。

    data = np.random.randint(0, 255, 300)
    print(type(data))
    
    # <class 'numpy.ndarray'>

    3.Numpy/Pytorch的dtype属性

    返回值为变量的数据类型

    t_out = torch.Tensor(1,2,3)
    print(t_out.dtype)
    # torch.float32
    
    t_out = torch.Tensor(1,2,3)
    print(t_out.numpy().dtype)
    # float32

    4.Numpy中的类型转换

    n_out = n_out.astype(np.uint8)
    # 由变量调用,但是直接调用不会改变原变量的数据类型,是返回值是改变类型后的新变量,所以要赋值回去。
    #初始化随机数种子
    np.random.seed(0)
     
    data = np.random.randint(0, 255, 300)
    print(data.dtype)
    n_out = data.reshape(10,10,3)
     
    #强制类型转换
    n_out = n_out.astype(np.uint8)
    print(n_out.dtype)
     
    img = transforms.ToPILImage()(n_out)
    img.show()

    Pytorch中的类型转换

    pytorch中没有astype函数,正确的转换方法是

    1.变量直接调用类型

    tensor = torch.Tensor(3, 5)
    
    # torch.long() 将tensor投射为long类型
    newtensor = tensor.long()
    
    # torch.half()将tensor投射为半精度浮点类型
    newtensor = tensor.half()
    
    # torch.int()将该tensor投射为int类型
    newtensor = tensor.int()
    
    # torch.double()将该tensor投射为double类型
    newtensor = tensor.double()
    
    # torch.float()将该tensor投射为float类型
    newtensor = tensor.float()
    
    # torch.char()将该tensor投射为char类型
    newtensor = tensor.char()
    
    # torch.byte()将该tensor投射为byte类型
    newtensor = tensor.byte()
    
    # torch.short()将该tensor投射为short类型
    newtensor = tensor.short()
    
    # 同样,和numpy中的astype函数一样,是返回值才是改变类型后的结果,调用的变量类型不变

    2.变量直接调用pytorch中的type函数

    type(new_type=None, async=False)如果未提供new_type,则返回类型,否则将此对象转换为指定的类型。 如果已经是正确的类型,则不会执行且返回原对象。

    用法如下:

    t = torch.LongTensor(3, 5)
    t = t.type(torch.FloatTensor)

    3.变量调用pytorch中的type_as函数

    如果张量已经是正确的类型,则不会执行操作。具体操作方法如下:

    t = torch.Tensor(3,5)
    tensor = torch.IntTensor(2, 3)
    t = t.type_as(tensor)

    ——————————

    版权声明:本文为CSDN博主「啧啧啧biubiu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37385726/article/details/81774150

  • 相关阅读:
    Spring MVC系列-(5) AOP
    Spring MVC系列-(4) Bean的生命周期
    Spring MVC系列-(3) Bean的装配
    Spring MVC系列-(2) Bean的装配
    Spring MVC系列-(1) Spring概述
    JVM性能优化系列-(7) 深入了解性能优化
    JVM性能优化系列-(6) 晚期编译优化
    pycharm下载较快地址
    编程学习记录14:Oracle数据库序列,触发器
    编程学习记录13:Oracle数据库,表的查询
  • 原文地址:https://www.cnblogs.com/ziwh666/p/12399075.html
Copyright © 2020-2023  润新知