基于Python对数据shape的常见操作详解


Posted in Python onDecember 25, 2018

这一阵在用python做DRL建模的时候,尤其是在配合使用tensorflow的时候,加上tensorflow是先搭框架再跑数据,所以调试起来很不方便,经常遇到输入数据或者中间数据shape的类型不统一,导致一些op老是报错。而且由于水平菜,所以一些常用的数据shape转换操作也经常百度了还是忘,所以想再整理一下。

一、数据的基本属性

求一组数据的长度

a = [1,2,3,4,5,6,7,8,9,10,11,12]
print(len(a))
print(np.size(a))

求一组数据的shape

list是没有shape属性的,所以需要把它转换成np或者使用np.shape()

b = [[1,2,3],[4,5,6],[7,8,9]]
print(np.shape(b))
print(np.array(b).shape)

二、数据的拼接

append是直接将数组或者数据直接追加到下一个元素的位置,而extend是将数据最外层的[]去掉后追加。

c = [1,1,1,1]
d = [[2,2],[[2,2],[2,2]]]
c.append([1,2,3])
d.extend([1,2,3])

[1, 1, 1, 1, [1, 2, 3]]
[[2, 2], [[2, 2], [2, 2]], 1, 2, 3]

另外也可以通过numpy中的方法来进行拼接

其中np.concatenate()的作用更偏向与数据的连接,通过其中的axis参数可以进行指定行列的拼接。

而np.append()的作用是将value b追加到arr a中。

c = np.concatenate((a, b))
d = np.append(a,b)
print(c)
print(d)

[1 1 1 1 2 2 2 2]
[1 1 1 1 2 2 2 2]

三、数据的shape的转换

1、转置

数据的转置也经常会用到,通常可以用到numpy的transpose()方法或者直接将数据转换为numpy array后用.T或者用reshape()方法。

a = [[1,1,1],
   [1,1,1]]
b = [[2,2,2],
   [2,2,2]]
c = [[3,3,3],
   [3,3,3]]
b = np.array(b)
c = np.array(c)

print(np.transpose(a))
print(b.T)
print(np.reshape(c, (c.shape[1], c.shape[0])))

[[1 1]
 [1 1]
 [1 1]]
[[2 2]
 [2 2]
 [2 2]]
[[3 3]
 [3 3]
 [3 3]]

2、数据展开

如果是一个多维的数组,可以直接使用np.reshape(-1)来进行转换,reshape是一个很好用的函数,其中的参数含义后面会讲到。

c = [[[3,3,3],
   [3,3,3]],
   [[2,2,2],
   [2,2,2]]]

print(np.reshape(c, -1))

[3 3 3 3 3 3 2 2 2 2 2 2]

3、维度转换

有时候可能会用到将一个一维的数组转换为二维,或者是在column方向或row方向上增加维度。

当给col方向增加维度时,可以直接arr[:,np.newaxis],

给row方向增加维度时,可以arr[np.newaxis,:]

另外,这里的np.newaxis可以这样理解:

一个[1,2,3,4,5]数组的shape是(5,),如果对它[:,np.newaix]的话,得到的shape就是(5,1)

对它[np.newaix, :]的话,得到的结果就是(1,5)。所以说newaxis加在哪个位置,哪个位置相应的维度就会产生一个新的维度。

a = np.array([1,1,1,1])

b = a[np.newaxis,:]
c = a[:,np.newaxis]

print(b)
print(c)

[[1 1 1 1]]
[[1]
 [1]
 [1]
 [1]]

另外再说一个将多维数组转换为一维的两种方法:arr.ravel()和arr.flatten()。

两者的不同之处在于arr.flatten()返回的是arr展开后的数组的复制,而arr.ravel()返回的是arr展开后的本身。

一个是对值的操作,另一个是对地址的操作。

类似c、c++中的指针。

a = np.array([[1,2,3]])
b = np.array([[1,2,3]])
a1 = a.flatten()
b1 = b.ravel()
print(a)
print(b)
a1[0] = 8
b1[0] = 8
print(a)
print(b)

[[1 2 3]]
[[1 2 3]]
[[1 2 3]]
[[8 2 3]]

4、reshape

def reshape(a, newshape, order='C'):

其中newshape参数可以传入一个[]或者tuple。

当数据的形状不确定时,如果想转换为1行,列数不确定的话,newshape可以传入(1, -1);

如果想转换为1列,行数不确定的话,newshape可以传入(-1, 1);

同理如果是2列或者2行的话,就是(-1, 2)或者(2,-1)。

其中-1代表的是一个模糊控制,就是不确定的意思。

a = [[1,1,1],
   [1,1,1]]
b = [[2,2,2],
   [2,2,2]]
c = [[[3,3,3],
   [3,3,3]],
   [[2,2,2],
   [2,2,2]]]

print(np.reshape(c, [-1, 1]))
print(np.reshape(b, [-1, 1]))
print(np.reshape(c, [2, -1]))

[[3]
 [3]
 [3]
 [3]
 [3]
 [3]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]]
[[2]
 [2]
 [2]
 [2]
 [2]
 [2]]
[[3 3 3 3 3 3]
 [2 2 2 2 2 2]]

以上这篇基于Python对数据shape的常见操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之坑爹的字符编码
Sep 28 Python
python实现验证码识别功能
Jun 07 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python中的集合介绍
Jan 28 Python
Python中调用其他程序的方式详解
Aug 06 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
为什么python比较流行
Jun 19 Python
Django框架请求生命周期实现原理
Nov 13 Python
如何基于python实现单目三维重建详解
Jun 25 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 #Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 #Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 #Python
Python lambda表达式用法实例分析
Dec 25 #Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 #Python
浅谈python 读excel数值为浮点型的问题
Dec 25 #Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 #Python
You might like
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
js微信分享实现代码
2020/10/11 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
详解angular2.x创建项目入门指令
2018/10/11 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
python实现爬虫下载美女图片
2015/07/14 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
python如何保存文本文件
2020/06/07 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
找工作最新求职信
2013/12/22 职场文书
会计助理岗位职责
2014/02/17 职场文书
厨房管理计划书
2014/04/27 职场文书
校园安全演讲稿
2014/05/09 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
利用Python实时获取steam特惠游戏数据
2022/06/25 Python