[转]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连接起来. 该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面 ...
随机推荐
- Linux SELinux 使用操作
Linux SELinux 使用操作 # 修改 SELinux 启动模式.临时生效 命令:setenforce [0|1] 0:转成 permissive 宽容模式: 1:转成 Enforcing 强 ...
- 关于 Scrapy 中自定义 Spider 传递参数问题
实际应用中,我们有可能在启动 Scrapy 的时候自定义一些参数来控制不同的业务流程,Google 尝试了如下方式可以实现 . 修改 Spider 构造函数 class myspider(Spide ...
- JavaScript的__proto__、prototype和继承
JavaScript也是可以“继承”的! 各位看官或是好奇,或是一知半解.什么是prototype,__proto__,constructor.哪种继承方式好.今天就在这交流交流. 什么是protot ...
- C# - MD5验证
前言 本篇主要记录:VS2019 WinFrm桌面应用程序实现字符串和文件的Md5转换功能.后续系统用户登录密码保护,可采用MD5加密保存到后台数据库. 准备工作 搭建WinFrm前台界面 如下图 核 ...
- Python中的常见特殊方法—— del方法
__del__() 方法用于销毁Python对象——在任何Python对象将被系统回收的时候,系统都会自动调用这个方法.但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果 ...
- Laravel 创建指定表 migrate
解决方案:打开创建表的那个 migration 文件,在创建表的方法执行之前加一个判断条件 if (!Schema::hasTable('password_resets')) { Schema::cr ...
- shell脚本实现自动化安装linux版本的loadrunner agent(centos6.8)
#!/bin/bash #Centos6下安装LoadRunner负载机 #@author Agoly #@date #@source 高级测试技术交流圈: yum -y install expect ...
- 考研辅助app的诞生!
背景: 去年下半年由于种种因素驱动下,准备去考研,在之前同事的推荐下,参加了考研培训班,培训班发了纸质书籍和线上视频观看账号,由于线上视频需要全程联网才能观看,突发奇想,要是我把这些视频下载下来,没网 ...
- mysql的floor()报错注入方法详细分析
刚开始学习sql注入,遇见了 select count(*) from table group by floor(rand(0)*2); 这么条语句.在此做个总结. (更好的阅读体验可访问 这里 ) ...
- 防止xss攻击的前端的方法
项目当中在进行安全测试的时候,遇到了xss的攻击,要求前端来做个防御,针对于遇到的xss攻击,做个总结 1.xss---存储型xss的攻击 前端只要在接收到后台数据的时候做个特殊字符的过滤,即可抵制攻 ...