![ee84591160ff5159c29107194eea4e40.png](https://i-blog.csdnimg.cn/blog_migrate/6ed7dd3c273a840b683a6f089b03240f.jpeg)
一、前言
对于在Deep Learning的学习中总会有几个数据类型的转换,这次想把这些常用的转换做一个总结,方便以后看。
这些主要包括:Dataframe、Series(pandas), array(numpy), list, tensor(torch)
二、定义
2.1 Dataframe和Series
这里简单介绍一下这两个结构。 Dataframe创建的方式有很多种,这里不赘述了。 以下举个例子,因为我们这里要讲的是和array等的转换,这里全都用数字型的元素。
![0dbe2d6b8dae475bf81a57dab555bc15.png](https://i-blog.csdnimg.cn/blog_migrate/81fbf7b21b0b9f21c8273bfbbc035cf6.png)
对于dataframe来说,我们打印出来,结构类似于一个二维矩阵格式,只是每一列和每一个行都有个index,这并且这些结构之间有很多方便的操作,在读入结构化数据的时候尤为方便,所以平时做偏结构化数据的时候, 比如excel、pickle等等,pandas的使用是绕不开的。
而其中的series相当于dataframe的一个元素,如下。
![c668d1dd19b5eda638d776791f5bdfb9.png](https://i-blog.csdnimg.cn/blog_migrate/b4865b492697bea1ccd7ec019bc9e378.png)
Series只有row index,有点类似于一个一维向量。
而DataFrame既有行索引也有列索引,它也可以被看做由Series组成的字典(共同用一个索引
2.2 array
数组结构是由不同维度的list转换来的,用array的原因主要在于有更多的矩阵操作,数据使用起来更方便,比如转置、矩阵相乘、reshape等等。
![ed824a7b1308b556e176ffc1111e8683.png](https://i-blog.csdnimg.cn/blog_migrate/e76eb77bc65a58e08238f11363e68707.png)
2.3 tensor
张量是在深度学习框架中的一个数据结构,把数据喂进模型中需要把数据转换为tensor结构,等我们再取出来做框架以外的操作,比如保存成文件,用plot画图,都需要重新转换为array或list结构。
![5a3294632a5a8a5f040e23d06db7254f.png](https://i-blog.csdnimg.cn/blog_migrate/33f20cc6c5421a3991902810c1daa008.png)
三、互相转换
先用一个例子直观举例下
![e68897915eba2ec1e7632fd7e3885f31.png](https://i-blog.csdnimg.cn/blog_migrate/4e1ced1d03bd2e9e5ff8ea9481b9750d.jpeg)
![9d1fbf2ddd274378f2cdeeacca100dc4.png](https://i-blog.csdnimg.cn/blog_migrate/3f37988d0c32348d94c4e17feae409bb.png)
四、详细总结
4.1 Dataframe到Series
挑一列的index取出
Series = Dataframe['column']
4.2 Series到list
list = Series.to_list()
4.3 list 转 array
array = np.array(list)
4.4 array 转 torch.Tensor
tensor = torch.from_numpy(array)
4.5 torch.Tensor 转 array
array = tensor.numpy()
# gpu情况下需要如下的操作
array = tensor.cpu().numpy()
4.6 torch.Tensor 转 list
# 先转numpy,后转list
list = tensor.numpy().tolist()
4.7 array 转 list
list = array.tolist()
4.8 list 转 torch.Tensor
tensor=torch.Tensor(list)
4.9 array或者list转Series
series = pd.Series({'a': array})
series2 = pd.Series({'a': list})
之后这里的操作就多了,看你具体需求了,也可以多个series拼成一个dataframe, 如下, 其他操作不一一赘述了
df = pd.DataFrame({'aa': series, 'bb': series2})