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

2023-11-03

目录

1.数据类型简介

Numpy

Pytorch

2.Python的type()函数

3.Numpy/Pytorch的dtype属性

4.Numpy中的类型转换

先聊聊我为什么会用到这个函数(不看跳过)

astype()函数

输出

4.Pytorch中的类型转换

Way1 : 变量直接调用类型

Way2 : 变量调用pytorch中的type函数

Way3 : 变量调用pytorch中的type_as函数


 

 

1.数据类型简介

Numpy

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

序号 数据类型及描述
1. bool_存储为一个字节的布尔值(真或假)
2. int_默认整数,相当于 C 的long,通常为int32或int64
3. intc相当于 C 的int,通常为int32或int64
4. intp用于索引的整数,相当于 C 的size_t,通常为int32或int64
5. int8字节(-128 ~ 127)
6. int1616 位整数(-32768 ~ 32767)
7. int3232 位整数(-2147483648 ~ 2147483647)
8. int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
9. uint88 位无符号整数(0 ~ 255)
10. uint1616 位无符号整数(0 ~ 65535)
11. uint3232 位无符号整数(0 ~ 4294967295)
12. uint6464 位无符号整数(0 ~ 18446744073709551615)
13. float_float64的简写
14. float16半精度浮点:符号位,5 位指数,10 位尾数
15. float32单精度浮点:符号位,8 位指数,23 位尾数
16. float64双精度浮点:符号位,11 位指数,52 位尾数
17. complex_complex128的简写
18. complex64复数,由两个 32 位浮点表示(实部和虚部)
19.

complex128复数,由两个 64 位浮点表示(实部和虚部)

直接使用类型名很可能会报错,正确的使用方式是np.调用,eg,  np.uint8

 

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中的类型转换

 

先聊聊我为什么会用到这个函数(不看跳过)

为了实施trochvision.transforms.ToPILImage()函数

于是我想从numpy的ndarray类型转成PILImage类型

我做了以下尝试

data = np.random.randint(0, 255, 300)
n_out = data.reshape(10,10,3)
print(n_out.dtype)
img = transforms.ToPILImage()(n_out)
img.show()

但是很遗憾,报错了

raise TypeError('Input type {} is not supported'.format(npimg.dtype))
TypeError: Input type int32 is not supported

因为要将ndarray转成PILImage要求ndarray是uint8类型的。

于是我认输了。。。

使用了

n_out = np.linspace(0,255,300,dtype=np.uint8)
n_out = n_out.reshape(10,10,3)
print(n_out.dtype)
img = torchvision.transforms.ToPILImage()(n_out)
img.show()

得到了输出

uint8

    嗯,显示了一张图片

但是呢,就很憋屈,和想要的随机数效果不一样。

于是我用了astype函数

 

astype()函数

由变量调用,但是直接调用不会改变原变量的数据类型,是返回值是改变类型后的新变量,所以要赋值回去。

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()

输出

int32
uint8

 

 

4.Pytorch中的类型转换

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

Way1 : 变量直接调用类型

 

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函数一样,是返回值才是改变类型后的结果,调用的变量类型不变

 

Way2 : 变量调用pytorch中的type函数

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

用法如下:

self = torch.LongTensor(3, 5)
# 转换为其他类型
print self.type(torch.FloatTensor)

 

Way3 : 变量调用pytorch中的type_as函数

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

self = torch.Tensor(3, 5)
tesnor = torch.IntTensor(2,3)
print self.type_as(tesnor)

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy/Pytorch之数据类型与强制类型转换 的相关文章

随机推荐

  • 将ant design pro打包的JS分离出去

    通过analyze分析发现其实react dom并不算小 有100多kb 所以就想把它单独引用 于是就在config ts增加 externals react window React react dom window ReactDOM b
  • 利用python3 生成密码本

    一 思路 1 把密码中含有哪些字符串都放入一个迭代器中 2 确定生成的密码是几位数的 3 将生成的所有密码写入一个文件里面 二 代码 import itertools as its 迭代器 words 1234567890 生成密码本的位数
  • 3.2 Python图像的频域图像增强-高通和低通滤波器

    3 2 Python图像的频域图像增强 高通和低通滤波器 文章目录 3 2 Python图像的频域图像增强 高通和低通滤波器 1 算法原理 1 1理想滤波器 1 2巴特沃斯滤波器 1 3指数滤波器 2 代码 3 效果 1 算法原理 高通和低
  • Mongodb笔记六:排序与限制输出

    一 排序 db collectionname find sort key1 1 key 1 这里的1代表升序 1代表降序 如 对所有人按年龄升序排序 降序排序 二 索引 索引是特殊的数据结构 索引存储在一个易于遍历读取的数据集合中 索引是对
  • FFmpeg中RTSP客户端拉流测试代码

    之前在https blog csdn net fengbingchun article details 91355410中给出了通过LIVE555实现拉流的测试代码 这里通过FFmpeg来实现 代码量远小于LIVE555 实现模块在liba
  • 蓝桥杯每日一题——手算题·空间

    本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝准备用 256MB 的内存空间开一个数组 数组的每个元素都是 3232 位 二进制整数 如果不考虑程序占用的空间和维护内存需要的辅助空间 请问 56MB 的空间可以
  • [阶段二] 4. MySQL的基本操作

    mysql的基本操作 数据插入 INSERT 语句可以向数据表写入数据 可以是一条记录 也可以是多条记录 INSERT INTO 数据表名称 字段1 字段2 VALUES 值1 值2 插入一条记录 INSERT INTO 数据表名称 字段1
  • 分析工具 nvprof简介

    nvprof 是一个可用于Linux Windows和OS X的命令行探查器 使用 nvprof myApp 运行我的应用程序 我可以快速看到它所使用的所有内核和内存副本的摘要 摘要将对同一内核的所有调用组合在一起 显示每个内核的总时间和总
  • 十六进制转二进制

    public static String hexToBinary String hex if hex null hex length 2 0 return null String bString String tmp for int i 0
  • Visual Studio(VS) 编程推荐字体和主题设置

    首先是字体 工具 gt 选项 gt 环境 gt 字体和颜色 具体图如下 选择Consolas的原因 Consolas算是最常见的编码字体了 在很多的编译软件都是这个字体 而且在这个字体下的中英文标点和半角圆角符号也能有比较明显的区别 至于字
  • Java 集合 - Map 接口

    文章目录 1 概述 2 常用 API 3 遍历 Map 集合 4 HashMap 和 Hashtable 5 LinkedHashMap 6 TreeMap 7 Properties 8 Set 集合与 Map 集合的关系 9 总结 1 概
  • C++11/14之模板全特化,偏特化

    目录 模板全特化 偏特化 类模板特化 类模板全特化 a 常规全特化 b 特化成员函数而不是模板 类模板偏特化 局部特化 a 模板参数数量 b 模板参数范围 int const int 比int小 函数模板特化 函数模板全特化 函数模板偏特化
  • LayerNorm的理解

    LayerNorm计算公式 y x E x
  • C语言实现多级反馈队列调度算法

    include
  • java架构师进阶之路

    Java架构师 应该算是一些Java程序员们的一个职业目标了吧 很多码农码了五六年的代码也没能成为架构师 那成为Java架构师要掌握哪些技术呢 总体来说呢 有两方面 一个是基础技术 另一个就是组织能力和提出解决方案能力了 如果你是想成为Ja
  • Netty入门-Channel

    目录 Channel详解 Channel的特点 Channel接口方法 ChannelOutboundInvoker接口 AttributeMap接口 ChannelHandler接口 ChannelInboundHandler接口 Cha
  • 请取件

    Part1前言 最常见的鼠标平移算法是平行于水平面 地面 的 无论相机视角如何 平移时 相机的世界Z值始终不变 因为绝大多数场景都是在观察地面上的物体 而人类的行走总是平行于地面的 但是本文要介绍的另一种小众的平移算法则平行于视锥体的截面
  • JPA使用审计功能新增时, 不自动更新@LastModifiedDate和@LastModifiedBy字段

    JPA使用审计功能新增时 不自动更新 LastModifiedDate和 LastModifiedBy字段 疑问 查询源码 解决方案 疑问 JPA使用审计功能 网上有一大堆demo 但是使用时 会发现创建的时候会自动填写 LastModif
  • Mac安装homebrew报错curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation

    homebrew安装时 一般直接在终端直接输入命令 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install master install 但是这个方
  • Numpy/Pytorch之数据类型与强制类型转换

    目录 1 数据类型简介 Numpy Pytorch 2 Python的type 函数 3 Numpy Pytorch的dtype属性 4 Numpy中的类型转换 先聊聊我为什么会用到这个函数 不看跳过 astype 函数 输出 4 Pyto