np.stack()函数详解
本文分了两部分,第一部分讲讲axis参数的理解,第二部分从np.stack函数的应用来反向理解该函数究竟干了些什么。
1.np.stack()中axis参数的深入理解
看了一下大家关于np.stack()的理解,我感觉自己还是一知半解,有点蒙。自己又想把这个函数搞明白 ,于是花了一点时间终于对这个函数有了自己的理解,决定把自己的想法写下来与大家分享,希望对大家有帮助。
stack为堆叠的意思,这个函数主要有两个参数,第一个是需要堆叠的多个数组,采用列表的形式输入,例如:np.stack([arrays1,array2,array3],axis=0)。第二个参数是axis,这个参数表示从哪一个维度进行堆叠以及堆叠的内容,这个维度是相对于堆叠的数组来说的。整个函数的输出为一个新数组。
下面以三维输出为例来谈谈我的理解。
先定义3个3*4的数组用来进行堆叠,注意进行堆叠的数组形式必须一致,在这里全为3×4:
a=np.array([i for i in range(12)]).reshape(3,4)
b=np.array([i for i in range(12,24)]).reshape(3,4)
c=np.array([i for i in range(24,36)]).reshape(3,4)
其结果为:
a= [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
b= [[12 13 14 15][16 17 18 19][20 21 22 23]]
c= [[24 25 26 27][28 29 30 31][32 33 34 35]]
来看看axis=0时,它是如何进行堆叠的:
new_array=np.stack([a,b,c],axis=0)
print(new_array)
#输出结果为:
[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]][[24 25 26 27][28 29 30 31][32 33 34 35]]]
axis为0,表示它堆叠方向为第0维,堆叠的内容为数组第0维的数据。前面说了第0维是相对于堆叠的数组而言的,而这里数组的第0维其实就是整个3×4的数组(其中第1维为行,第2维为某一行中的一个值,这里有一个层层深入的感觉),所以就是以整个3×4的数组为堆叠内容在第0维上进行堆叠,等到的结果就是一个3×3×4的新数组。再通俗一点,就是将a,b,c分别作为堆叠内容进行堆叠得到3×3×4的输出。
再来看看axis=1的时候:
new_array=np.stack([a,b,c],axis=1)
print(new_array)
#输出结果为:
[[[ 0 1 2 3][12 13 14 15][24 25 26 27]][[ 4 5 6 7][16 17 18 19][28 29 30 31]][[ 8 9 10 11][20 21 22 23][32 33 34 35]]]
和刚才的解释一样,axis为1表示堆叠的方向为3×4数组的第1维(行),堆叠内容也为3×4数组的第1维的数据。而3×4的数组的第1维就是它的行,以数组a为例,它的堆叠数据分别是[0 1 2 3],[ 4 5 6 7],[ 8 9 10 11]。所以a,b,c三个数组在第1维上堆叠后的结果就是上面的输出结果。
当axis=2时,表示堆叠内容是3×4数组的第二维的数据(数组中某一行的某个值),堆叠方向为第二维(也就是先补全某一行)。对于数组a,第2维的第一个值为0,b为12,c为24,所这三个值组成堆叠后的新数组的一行,以此类推,最终可以得到下面的输出结果。
new_array=np.stack([a,b,c],axis=2)
print(new_array)
[[[ 0 12 24][ 1 13 25][ 2 14 26][ 3 15 27]][[ 4 16 28][ 5 17 29][ 6 18 30][ 7 19 31]][[ 8 20 32][ 9 21 33][10 22 34][11 23 35]]]
2.np.stack()的应用
现在假设我有一个3×3×4的数组a:
[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]][[24 25 26 27][28 29 30 31][32 33 34 35]]]
另外假设:
x=a[0,:,:]
y=a[1,:,:]
z=a[2,:,:]
如果我们想用x,y,z来重新拼成数组a,就可以利用stack函数来实现:
s=np.stack([x,y,z],axis=0)
print(s)
#结果等于数组a
[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]][[24 25 26 27][28 29 30 31][32 33 34 35]]]
再假设:
x=a[:,:,0]
y=a[:,:,1]
z=a[:,:,2]
r=a[:,:,3]
同样的,这里的数组a被分成了四个低维的元数组x,y,z,r。如果想用这四个元数组拼成原数组a我们可以这样做:
s=np.stack([x,y,z,r],axis=2)
print(s)
[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]][[24 25 26 27][28 29 30 31][32 33 34 35]]]
希望这个思路能有助于大家更好理解。
np.stack()函数详解相关推荐
- np.stack()函数详解 ==>堆叠 【类似于torch.stack()】
目录 1.来看看axis=0时,它是如何进行堆叠的:(按矩阵进行堆叠) 2.再来看看axis=1的时候:(按行进行堆叠) 3.当axis=2时(按列的的元素进行堆叠,先堆叠三个矩阵的第0个元素0,12 ...
- Python先生,你好!(6)——np.random函数详解
Python先生,你好!(6)--np.random函数详解 (一)前 言 (二)常用方法 (1)np.random.rand() (2)np.random.randn() (3)np.random. ...
- 协方差矩阵数学原理,numpy计算协方差矩阵(np.cov)函数详解与源码剖析
协方差矩阵详解以及numpy计算协方差矩阵(np.cov) 协方差矩阵详解 均值,标准差与方差 由简单的统计学基础知识,我们有如下公式: X ˉ = ∑ i = 1 n X i n \bar X{\r ...
- ndarray维度认识及np.concatenate函数详解
https://blog.csdn.net/kealennieh/article/details/82464665 np.stack() 因为stack()函数会先把参数arrays中的每个元素变成n ...
- 【知识点】Python 的np.prod函数详解
np.prod是Numpy库中的一个函数,全称为numpy.prod,它的作用是计算数组中所有元素的乘积.该函数是一个快速的计算积的方法,可以接收任意数组或矩阵作为输入,并返回这些数字的乘积. 举个例 ...
- np.cross函数详解
numpy.cross Reference: Official Document of Numpy 语法 numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1, ...
- Python 中np.prod函数详解
官方文档,输入a是数组,返回指定轴上的乘积,不指定轴默认是所有元素的乘积. 默认全部元素相乘,123*4=24 axis =0是按列乘, axis = 1是按行乘.
- pytorch函数详解
pytorch函数详解 在typora这里写之后复制到简书上 1. torchvision 1.1 transforms.Compose(transforms) 把几个转换组合 example: fr ...
- blankcount函数python,Python pandas常用函数详解
本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名, ...
- python中transpose函数_对numpy中的transpose和swapaxes函数详解
transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...
最新文章
- [译]Kotlin + buildSrc:更好的管理Gadle依赖
- 德国小哥1人“黑掉”谷歌地图:99部手机就能造成交通拥堵
- Struts2 标签配置详细
- python猜数字循环_python-练习实现猜数字的循环
- 液晶电视服务器无响应时间,液晶电视响应速度时间是多少更好啊?
- 大厂程序员辞职创业,赚的还没原来多!
- Flutter基础—开发环境与入门
- python语句分号_python 为什么不用分号作终止符?
- 微信小程序用RSA加密和java后台对接。
- mysql_store_result和mysql_use_result
- 二战十大致命武器之“喷火”式战斗机
- java解析xml方法_详解Java解析XML的四种方法
- 完整版JavaWeb环境搭建-maven-servlet...与测试,欢迎大家一起学习
- 关于LocalDateTime的全局返回时间带“T“的时间格式处理
- 广州大学2021计算机组成原理课程设计实验报告
- WARN Error while fetching metadata with correlation id 1 : {first=LEADER_NOT_AVAILABLE} (org.apache.
- iOS开发实现资源包增量更新
- sql between包括两端吗?
- C/C++常见面试知识点总结附面试真题----20220326更新
- cut the rope HTML 5版本背后的开发故事