[转]numpy中数据合并,stack ,concentrate,vstack,hstack
转自:https://www.cnblogs.com/onemorepoint/p/9541761.html
在python的numpy库中有一个函数np.stack()
np.stack
首先stack函数用于堆叠数组,其调用方式如下所示:
np.stack(arrays,axis=0)
其中arrays即需要进行堆叠的数组,axis是堆叠时使用的轴,比如:
arrays = [[1,2,3,4], [5,6,7,8]]
这是一个二维数组,axis=0表示的是第一维,也即是arrays[0] = [1,2,3,4]或者arrays[1] = [5,6,7,8]
axis=i时,代表在堆叠时首先选取第i维进行“打包”
具体例子:
当执行np.stack(arrays, axis=0)时,取出第一维的1、2、3、4,打包,[1, 2, 3, 4],其余的类似,然后结果如下:
- >>> arrays = [[1,2,3,4], [5,6,7,8]]
- >>> arrays=np.array(arrays)
- >>> np.stack(arrays,axis=0)
- array([[1, 2, 3, 4],
- [5, 6, 7, 8]])
当执行np.stack(arrays, axis=1)时,先对arrays中的第二维进行“打包”,也即是将1、5打包成[1, 5],其余的类似,结果如下:
- >>> np.stack(arrays, axis=1)
- array([[1, 5],
- [2, 6],
- [3, 7],
- [4, 8]])
有这个“打包”的概念后,对于三维的数组堆叠也不难理解了,例如:
a = np.array([[1,2,3,4], [5,6,7,8]])
arrays = np.asarray([a, a , a])
- >>> arrays
- array([[[1, 2, 3, 4],
- [5, 6, 7, 8]],
- [[1, 2, 3, 4],
- [5, 6, 7, 8]],
- [[1, 2, 3, 4],
- [5, 6, 7, 8]]])
执行np.stack(arrays, axis=0),也就是对第一维进行打包,结果如下:
- >>> np.stack(arrays, axis=0)
- array([[[1, 2, 3, 4],
- [5, 6, 7, 8]],
- [[1, 2, 3, 4],
- [5, 6, 7, 8]],
- [[1, 2, 3, 4],
- [5, 6, 7, 8]]])
执行np.stack(arrays, axis=1),也就是对第二维进行打包,取出第二维的元素[1,2,3,4]、[1,2,3,4]、[1,2,3,4],打包,[[1,2,3,4],[1,2,3,4],[1,2,3,4]],对其余的也做类似处理,结果如下:
- >>> np.stack(arrays, axis=1)
- array([[[1, 2, 3, 4],
- [1, 2, 3, 4],
- [1, 2, 3, 4]],
- [[5, 6, 7, 8],
- [5, 6, 7, 8],
- [5, 6, 7, 8]]])
执行np.stack(arrays, axis=2),与之前类似,取出第三维元素1、1、1,打包[1,1,1],结果如下:
- >>> np.stack(arrays, axis=2)
- array([[[1, 1, 1],
- [2, 2, 2],
- [3, 3, 3],
- [4, 4, 4]],
- [[5, 5, 5],
- [6, 6, 6],
- [7, 7, 7],
- [8, 8, 8]]])
总结而言,也就是arrays是你要进行堆叠的数组,axis控制你要将arrays中哪个维度组合起来(也就是文中的“打包”)。
np.concatenate
np.concatenate((a1,a2,a3,...), axis=0),这个函数就是按照特定方向轴进行拼接,默认是第一维,在numpy官网上的示例如下:
- >>> a = np.array([[1, 2], [3, 4]])
- >>> b = np.array([[5, 6]])
- >>> np.concatenate((a, b), axis=0)
- array([[1, 2],
- [3, 4],
- [5, 6]])
- >>> np.concatenate((a, b.T), axis=1)
- array([[1, 2, 5],
- [3, 4, 6]])
当axis=0时,将b的元素加到a的尾部,这里比较难以理解的是第二个np.concatenate((a, b.T), axis=1),其实也类似,b.T的shape为(1,2),axis=1,则在a的第二维加上b的每个元素,所以这里axis=i时, 输入参数(a1,a2,a3...)除了第i维,其余维度的shape应该一致,例如:
- >>> a = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
- >>> b = np.array([[[1,2,3],[4,5,6]]])
- >>> np.concatenate((a, b), axis=0)
- array([[[1, 2, 3],
- [4, 5, 6]],
- [[1, 2, 3],
- [4, 5, 6]],
- [[1, 2, 3],
- [4, 5, 6]]])
这里a的shape为(2,2,3),b的shape为(1,2,3),axis=0则要求a,b在其他两维的形状是一致的,如果直接在其他维度进行concatenate操作则会报错(因为axis=1时,a和b在第一维的长度不一致):
- >>> np.concatenate((a, b), axis=1)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- ValueError: all the input array dimensions except for the concatenation axis must match exactly
- >>> np.concatenate((a, b), axis=2)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- ValueError: all the input array dimensions except for the concatenation axis must match exactly
下面一个例子能够说明:
- >>> c=np.array([[[5,6,7],[7,8,9]],[[4,5,6],[5,6,7]]])
- >>> c
- array([[[5, 6, 7],
- [7, 8, 9]],
- [[4, 5, 6],
- [5, 6, 7]]])
- >>> c.shape
- (2, 2, 3)
- >>> np.concatenate((a, c), axis=1)
- array([[[1, 2, 3],
- [4, 5, 6],
- [5, 6, 7],
- [7, 8, 9]],
- [[1, 2, 3],
- [4, 5, 6],
- [4, 5, 6],
- [5, 6, 7]]])
- >>> np.concatenate((a, c), axis=2)
- array([[[1, 2, 3, 5, 6, 7],
- [4, 5, 6, 7, 8, 9]],
- [[1, 2, 3, 4, 5, 6],
- [4, 5, 6, 5, 6, 7]]])
np.hstack
np.hstack(tup), 按照列的方向堆叠, tup可以是元组,列表,或者numpy数组, 其实也就是axis=1,即
np.hstack(tup) = np.concatenate(tup, axis=1)
按照上面对concatenate的理解则下面的示例很好理解
- >>> a = np.array((1,2,3))
- >>> b = np.array((2,3,4))
- >>> np.hstack((a,b))
- array([1, 2, 3, 2, 3, 4])
- >>> a = np.array([[1],[2],[3]])
- >>> b = np.array([[2],[3],[4]])
- >>> np.hstack((a,b))
- array([[1, 2],
- [2, 3],
- [3, 4]])
np.vstack
np.vstack(tup), 按照行的方向堆叠, tup可以是元组,列表,或者numpy数组, 理解起来与上相同
np.vstack(tup) = np.concatenate(tup, axis=0)
- >>> a = np.array([1, 2, 3])
- >>> b = np.array([2, 3, 4])
- >>> np.vstack((a,b))
- array([[1, 2, 3],
- [2, 3, 4]])
- >>> a = np.array([[1], [2], [3]])
- >>> b = np.array([[2], [3], [4]])
- >>> np.vstack((a,b))
- array([[1],
- [2],
- [3],
- [2],
- [3],
- [4]])
对于第二段代码,a的第一维元素分别时[1],[2],[3],所以堆叠时将b的对应元素直接加入
np.dstack
np.dstack(tup), 按照第三维方向堆叠,也即是
np.dstack(tup) = np.concatenate(tup, axis=2), 这里较好理解,所以直接放官网的示例
- >>> a = np.array((1,2,3))
- >>> b = np.array((2,3,4))
- >>> np.dstack((a,b))
- array([[[1, 2],
- [2, 3],
- [3, 4]]])
- >>> a = np.array([[1],[2],[3]])
- >>> b = np.array([[2],[3],[4]])
- >>> np.dstack((a,b))
- array([[[1, 2]],
- [[2, 3]],
- [[3, 4]]])
np.column_stack和np.row_stack
np.column_stack函数将一维的数组堆叠为二维数组,方向为列
np.row_stack函数将一维的数组堆叠为二维数组,方向为行
其实如果对前面的内容理解之后这两个算是比较简单的了
- >>> a = np.array((1,2,3))
- >>> b = np.array((2,3,4))
- >>> np.column_stack((a,b))
- array([[1, 2],
- [2, 3],
- [3, 4]])
- >>> np.row_stack([np.array([1, 2, 3]), np.array([4, 5, 6])])
- array([[1, 2, 3],
- [4, 5, 6]])
总结
其实也就是两种操作,stack和concatenate,其中stack是首先找到axis轴的元素,然后对该轴的元素进行组合,然后形成新的数组,而concatenate则是在axis轴进行拓展,将a1,a2,a3...按照axis指定的轴进行增加操作...
[转]numpy中数据合并,stack ,concentrate,vstack,hstack的更多相关文章
- numpy中数据合并,stack ,concentrate,vstack,hstack
在python的numpy库中有一个函数np.stack(), 看过一些博文后觉得别人写的太复杂,然后自己有了一些理解之后做了一些比较简单的解释 np.stack 首先stack函数用于堆叠数组,其调 ...
- Numpy中数据的常用的保存与读取方法
小书匠 深度学习 文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...
- Python Numpy中数据的常用的保存与读取方法
在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...
- Numpy中数据的常用的保存与读取
保存到文本文件numpy.savetxt()numpy.loadtxt() import numpy as np x= np.arange(0,10,0.1) np.savetxt('save_x', ...
- numpy 中的堆叠 stack
参考: https://blog.csdn.net/Riverhope/article/details/78922006 vstack,vertical 垂直堆叠 hstack, horizontal ...
- Python numpy中矩阵的用法总结
关于Python Numpy库基础知识请参考博文:https://www.cnblogs.com/wj-1314/p/9722794.html Python矩阵的基本用法 mat()函数将目标数据的类 ...
- Python-OpenCV中图像合并显示
在图像处理中,我们通常需要将原图像与处理后的图像放在同一个窗口显示,这样便于比较. 首先,需要介绍Numpy中的两个函数:hstack().vstack(). 函数原型:hstack(tup) ,参数 ...
- 基于Python中numpy数组的合并实例讲解
基于Python中numpy数组的合并实例讲解 下面小编就为大家分享一篇基于Python中numpy数组的合并实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python中n ...
- Pandas中DataFrame数据合并、连接(concat、merge、join)之merge
二.merge:通过键拼接列 类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来. 该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面 ...
随机推荐
- 聊聊Java 虚拟机的“那点事”
本文的使用方法: 这篇文章是一个总结性质的文章,是我在看完<深入理解 Java 虚拟机>后写的(里面可能会有些不准确的地方,欢迎大家指出),本文从头读到尾就是一个虚拟机大部分知识点的框架, ...
- 博客中新浪图床 迁移至 阿里云的OSS
前言 因为之前有个新浪的图床,还挺好用,而且免费,自己博客的图片上传到其上面也挺方便的,但是,前几周吧,突然图片就不能访问了,之前本来是想通过添加 meta 头来解决的,但是发现没有效果.于是就自己搞 ...
- RESTful Webservice 和 SOAP Webserivce 对比及区别【转】
接口抽象 RESTful Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务能力,而不同的是,SOAP 应用都通过定义自己个性化的接口方 ...
- 第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
云原生应用,是指符合“云原生”理念的应用开发与交付模式,这是当前在云时代最受欢迎的应用开发最佳实践. 在现今的云原生生态当中,已经有很多成熟的开源软件被制作成了 Helm Charts,使得用户可以非 ...
- tf.where()函数的解析
tf.where()的使用,该函数会返回满足条件的索引.经验证,发现返回均是二维矩阵,可以说明该函数用二维矩阵给出满足条件的位置索引.(若有错误,欢迎指正.) 代码如下:import tensorfl ...
- 【maven】父子项目的一般姿势
一.为什么需要创建maven父子项目. 一般一个业务较多的项目,如果我们做服务拆分的话,有些公共的模块就只能做成jar包了.你将util.constant.model封装成jar包是比较好的,如果da ...
- 电信NBIOT 6 - NBIOT实现数据上传及指令接收
电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...
- EFLAGS寄存器(标志寄存器)
这篇文章不是从0开始的,前面还有一些汇编基础指令以及进制,我都没写,时间问题,还是今天空闲,我才想补一下博文,后面我陆续会把前面知识点渐渐补上.我不会重0基础讲起,中间会以.汇编.C.C++交叉的形式 ...
- Linux上安装git
Linux上安装git Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用Git工具的时候 ...
- python关于SSL的认证--pycurl模块使用
今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.cs ...