博主近期在学习深度学习模型时,发现这个数据类型转换和维度的重构既细节又容易出错,特总结此篇文章,用于自己回顾和分享给有需要的朋友,总结可能不是很全面,不足之处还望大家多多包涵!
一、数据类型基本主要是:整形、浮点型、字符串型、list列表格式、numpy数组格式、tensor张量格式等。数据类型之间的转换参考下面的代码:
- 整型转浮点型
a =1 a = float(a) # 整型转浮点型 print(a)
- 整型转字符串型
a =1 a = str(a) # 整型转字符串型 print(type(a))
- 整型转tensor格式(包含先转numpy,原因是:若整型直接转换成tensor张量格式后会发生数值溢出,这是内存机制本身设计的问题)
import numpy as np import torch as t a = 1 a = np.array(a, dtype=np.float32) # 整型转numpy a = t.LongTensor(a) # numpy转tensor print(a)
- 浮点型转整型
a = 1.0 a = int(a) # 浮点型转整型 print(a)
- 浮点型转字符串型
a = 1.0 a = str(a) # 浮点型转字符串型 print(type(a))
- 字符串转整型
s = '666' s = int(s) # 字符串转整型 print(type(s))
- 字符串转浮点型
s = '666.0' s = float(s) # 字符串转浮点型 print(s) print(type(s))
- 列表list和数组numpy及tensor三种数据格式互转:点击打开《Pytorch实践中的list、numpy、torch.tensor之间数据格式的相互转换方法》文章 。
二、list列表格式、numpy数组格式、tensor格式数据维度之间的转换涉及多维度降维,因此比较容易出错,谨慎为上。
- 列表list维度降维,下面以二维举例。
a = [[1,2,3],[6,8,5]] # 二维列表 a = [i for item in a for i in item] # 二维双层循环,三维三层循环 print(a)
- numpy维度降维,分两种情况:(1)针对有维度为1的维度进行压缩实现降维,两种方式(2)针对无维度为1的维度进行重构造实现降维,下面以二维举例。
# 方式一 import numpy a = numpy.array([[1],[2],[3]]) a = a.squeeze() # 针对有维度为1的维度进行压缩 print(a)
# 方式二 import numpy a = numpy.array([[1],[2],[3]]) a = numpy.squeeze(a) # 针对有维度为1的维度进行压缩 print(a)
import numpy a = numpy.array([[1,2],[2,4],[3,5]]) a = [i for item in a for i in item] # 针对无维度为1的维度进行重构造 print(a)
- tensor维度降维,分两种情况:(1)针对有维度为1的维度进行压缩实现降维,点击打开《python以三维tensor为例详细理解unsqueeze和squeeze函数》文章 作为参考(2)针对无维度为1的维度进行重构造实现降维并转换为list,下面以二维举例。(还有一种方式用for循环结合torch.cat函数进行两个tensor拼接实现,注意:两个tensor除了要拼接的维度外,其他维度数值必须保持一致,否则会报错)
import torch a = torch.LongTensor([[1,2,3],[6,8,5]]) a = [i.tolist() for item in a for i in item] # 针对无维度为1的维度进行重构造实现降维并转换为list print(a)
三、总结
数据类型转换和维度降维是结合操作,博主分开阐述是方便大家理解,但在理解后要结合起来对数据进行适当的转换和操作达到自己数据预处理的目的。比如:数据集导入程序是list格式,但我们需要将数据集转换成tensor格式,最后算法模型输出对比时需要降维再对比等,这个例子具体内容详情可以参考博主的下一篇关于GCN(图卷积网络)3.0的文章。
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树科学计算基础软件包NumPyNumPy概述214084 人正在系统学习中