vstack、hstack和dstack都用于把几个小数组合并成一个大数组。它们的差别是小数组的元素在大数组中的排列顺序有所不同。把两部手机摆到一起有几种方式?水平的左右排列,垂直的上下排列,还可以把手机一扣在手机二的顶上,把它们摞起来。这三种排列方式体现了vstack、hstack和dstack在合并数组时的特点。

一、vstack

vstack实现了轴0合并。vstack的字母v表示vertical的意思,提示用户把它想象成垂直合并。观察一维和二维数组的情况,b在结果中被排在a的后面,形成a在上,b在下的垂直关系。

import numpy as np
a = [1,2]
b = [3,4]
c = np.vstack((a,b))
print(c)
a = [[1,2]]
b = [[3,4]]
c = np.vstack((a,b))
print(c)
'''
[[1 2][3 4]]
[[1 2][3 4]]
'''

显然,a被存到c[0]中,b被存到c[1]中,a、b二者在0号轴上连接起来。对于两个高维数组a、b来说,vstack在合并a、b时已全无垂直或上下这样直观的位置关系,但a、b仍旧保持在0号轴上a在前2层,b在后2层的位置关系。程序中np.sum(c[2:]-b)等于0表示c[2:]和b拥有同样的元素,np.sum(c[:2]-a)等于0表示c[:2]与a有同样的元素。想想c有什么样的形状?答曰(4,3,4,5)。

a = np.arange(120).reshape(2,3,4,5)
b = np.arange(120,240).reshape(2,3,4,5)
size = a.shape[0]
print(np.sum(c[:2]-a))
print(np.sum(c[2:]-b))
# 0
# 0

二、hstack

hstack表示轴1合并。hstack的字母h来自于horizontal,表示两个数组是水平的,hstack((a,b))将把b排在a的右边的意思。

print(np.hstack([[1,2],[3]]))
# [1,2,3]

现在没有增维,结果不像vstack,对一维数组合并的结果还是一维的。

a = [[1,2],[3,4]]
b = [[5],[6]]
print(np.hstack([a,b]))
# [[1 2 5]
#  [3 4 6]]

在结果c中,b就在a的右边。它表明c中b元素的1轴坐标会大于a元素的1轴坐标。对于高维数组而言,如下例所示,a的a[:0]、a[:1]、a[:,2],构成c的c[:,0]、c[:,1]、c[:,2],b的[:,0]构成c的c[:4]。a、b在1号轴坐标上被连接起来。

a = np.arange(120).reshape(2,3,4,5)
b = np.arange(120,160).reshape(2,1,4,5)
size = a.shape[1]
c = np.hstack([a,b])
print(np.sum(c[:,:size]-a))
print(np.sum(c[:,size:]-b))
# 0
# 0

三、dstack

dstack自然是说deep stack了,它是轴2合并。dstack([a,b])把a和b摞在一起,像一摞扑克牌一样。

a = np.array([1,2])
b = np.array([3,4])
print(np.dstack((a,b)))
# [[[1 3]
#   [2 4]]]

咦,例子的结果跟vstack有点像嘛。前面是长度和宽度的问题,现在是高度的问题了,所以结果变成了三维的。

现在,a、b在2号轴上被连接起来。如果a、b是一维数组,或是二维数组,系统首先将a、b变为三维数组,再按照2号轴进行合并操作,把a追加到c中,再把b的元素排到c中。在结果中,来自于b的元素的2号轴的下标将变大,因此排到a的后面,但各元素其它轴的坐标不变。

a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = np.dstack([a,b])
print(c)
'''
[[[1 5][2 6]][[3 7][4 8]]]
'''
print(c[:,:,0])
'''
[[1 2][3 4]]
'''
print(c[:,:,1])
'''
[[5 6][7 8]]
'''

下面的代码演示了对于更高维的数组,如4维数组轴2合并的结果是b沿2号轴排列到a的后面。print(np.sum(c[:,:,4:6]-b))的结果为0表示c[:,:,4] == b[:,:,0],c[:,:,5] == b[:,:,1],也就是说c的2号轴的4、5下标是b的元素,自然,前面的0、1、2、3下标的元素是a的元素。

a = np.arange(120).reshape(2,3,4,5)
b = np.arange(120,180).reshape(2,3,2,5)
c = np.dstack([a,b,b])
print(np.sum(c[:,:,:4]-a))
# 0
print(np.sum(c[:,:,4:6]-b))
# 0
print(np.sum(c[:,:,6:]-b))
# 0

一个元素,写于20180411

numpy函数hstack,vstack,dstack简介相关推荐

  1. [转]Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()

    Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate() 觉得有用的话,欢迎一起讨论相互学习~Follow Me ...

  2. Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()的使用

    Python numpy函数hstack() vstack()stack()dstack()vsplit()concatenate()的使用 文章目录: 一. 一. Reference: 1.http ...

  3. Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()

    感觉numpy.hstack()和numpy.column_stack()函数略有相似,numpy.vstack()与numpy.row_stack()函数也是挺像的. stackoverflow上也 ...

  4. [Numpy]stack(), hstack(), vstack(), concatenate()

    部分资料来源于网络,仅做个人学习之用 目录 0. axis取值 1. stack() 2. hstack() 3. vstack() 4. concatenate() 0. axis取值 在numpy ...

  5. Python numpy hstack() vstack() stack() dstack() vsplit() concatenate()函数用法和区别

    参考文章:Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()

  6. 数据处理遇到麻烦不要慌,5个优雅的Numpy函数助你走出困境

    选自TowardsDataScience 作者:Baijayanta Roy 机器之心编译 在机器学习和数据科学工程的日常数据处理中,我们会遇到一些特殊的情况,需要用样板代码来解决这些问题.在此期间, ...

  7. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组

    Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组.split函数垂直拆分二维numpy数组 目录

  8. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组

    Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组.split函数水平(按列)拆分二维numpy数组 目 ...

  9. MSSQL Sql加密函数 hashbytes 用法简介

    原文:MSSQL Sql加密函数 hashbytes 用法简介 转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashb ...

最新文章

  1. Windows Server 2008与2012建立林信任关系
  2. github工具:Octotree安装和使用教程
  3. 添加类iOS cocos2d 2游戏开发实战(第3版)
  4. Tips6:用[HideInInspector]在Inspector中隐藏变量
  5. oracle创建表空间及用户,Oracle创建表空间和用户
  6. 面试题收集——Java基础部分(一)
  7. 有初学的同学问你为什么Java的main方法必须是public static void?请告诉ta!
  8. 【OpenCV】OpenCV函数精讲之 -- Mat和IplImage之间的相互装换(OpenCV2.0和OpenCV3.0)
  9. 万字详述 MySQL ProxySQL
  10. Java 算法 一元多项式求导
  11. 5.7 tensorflow2实现主成分分析(PCA) ——python实战(下篇)
  12. linux mail 使用外部邮箱地址发邮件
  13. 自学编程的 6 个致命误区
  14. 优思学院|注册六西格玛绿带考试试题及答案详解
  15. FLASH,宣传画册,翻书效果
  16. 重磅!风再起· 2020——巴比特全球合作伙伴云端峰会下周启幕,12大主题穿越减半,招募计划今日启动...
  17. 金字塔原理(pgn 项目计划、方案、汇报、总结、PPT等)
  18. android+打开apk文件怎么打开,安卓手机apk文件怎么打开
  19. python中的aliasing
  20. python图片合成视频

热门文章

  1. 判断身份证号码的正确性源码
  2. 科研中的部分依赖图(PDP)绘制
  3. javascript实现页面倒计时
  4. 子午学术论坛邀请注册码
  5. CentOS版本的Linux的安装
  6. Js定时器倒计时及堆叠问题解析(附源码)
  7. wordpress网站侧边栏添加广告位代码
  8. 同样是技术出身,深夜看完张一鸣200条微博,让我越想越后怕
  9. C++语言程序设计第五版 - 郑莉(第六章课后习题)
  10. 在使用npm install时遇到的问题 npm ERR! code ERESOLVE