pythonnp.stack()函数原理详细分析
零、描述分析
这个函数主要有两个参数,第⼀个是需要堆叠的多个数组,注意进⾏堆叠的数组形式必须⼀致。例如:
np.stack([arrays1,array2,array3],axis=0)。第⼆个参数是axis,这个参数表⽰从哪⼀个维度进⾏堆叠以及堆叠的内容,这个维度是相对于堆叠的数组来说的。
问题1:stack的本质作⽤是在⼲什么?stack为堆叠的意思,它的本质是在给数组升维。
问题2:np.stack([])中和其他函数相⽐为什么⾥⾯多了⼀个中括号?[]表⽰了传⼊的数组采⽤列表的形式输⼊。整个函数的输出为⼀个新数组。
问题3:axis=0,axis=1,axis=2,…axis=-1,axis去不同值时的含义是什么?不同的维度的数组axis可取的值不同,如⼀维时可取axis=0,axis=1,⼆维时axis=0,axis=1,axis=2,三维…以此类推。axis=0表⽰是堆叠的是数组整体,例如⼀维数组它的整体就是⾏就是按⾏进⾏堆叠,⼀个3×4的⼆维数组的整体就是整个3×4的数组就是将每个3×4的数组整体进⾏堆叠。axis=1表⽰的就是数组最⾼维的下⼀维,例⼀维就表⽰的是每⼀个元素,⼆维表⽰的就是⾏。axis=2以此类推,表⽰⼆维数组的元素三位数组的⾏,更⾼维数组以此类推。
看图进⾏更直观的理解:
a = np.array([[1,2],[3,4],[5,6]])
b = np.array([[10,20],[30,40],[50,60]])
a、b进⾏axis=0维堆叠
进⾏axis=1维堆叠
进⾏axis=2维堆叠
⼩规律:n个变量在x维堆叠(axis=x),则堆叠产⽣的新变量的第x维的维数为n;或者说,新变量的shape值为原shape值在第x位插⼊数字n。
⼀、先来看看官⽅API函数说明
⼆、代码实例分析(stack堆叠⼀维数组)
定义两个1*16的⼆维数组⽤来进⾏堆叠,注意进⾏堆叠的数组形式必须⼀致。
x = np.array([i for i in range(16)])
y = np.array([i for i in range(16,32)])
print(x)
print(y)
输出结果:
[0123456789101112131415]
[16171819202122232425262728293031]
a = np.stack([x, y], axis=0)
b = np.stack([x, y], axis=1)
结果:
axis=0时第⼀个⼀维数组就是2×16⼆维数组的第⼀⾏(块)、第⼆个⼀维数组就是2×16⼆维数组的第⼆块
axis=1时第⼀个⼀维数组的第⼀个元素就是⼆维数组的第⼀⾏的第⼀个元素、第⼆个⼀维数组的第⼀个元素就是⼆维数组的第⼀⾏的第⼆个元素构成⼆维数组的第⼀⾏(块),第⼀个⼀维数组的第⼆个元素就是⼆维数组的第⼆⾏的第⼀个元素、第⼆个⼀维数组的第⼆个元素就是⼆维数组的第⼆⾏的第⼆个元素构成⼆维数组的第⼆⾏****(块)…
[[0123456789101112131415]
[16171819202122232425262728293031]]
[[016]
[117]
[218]
[319]
[420]
[521]
[622]
[723]
[824]
[925]
[1026]
python 定义数组[1127]
[1228]
[1329]
[1430]
[1531]]
三、代码实例分析(⾸先stack堆叠⼆维数组)
定义三个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)
结果:
[[0123]
[4567]
[891011]]
[[12131415]
[16171819]
[20212223]]
[[24252627]
[28293031]
[32333435]]
a_ = np.stack([a, b, c], axis=0)
b_ = np.stack([a, b, c], axis=1)
c_ = np.stack([a, b, c], axis=2)
d_ = np.stack([a, b, c], axis=-1)
结果:
[[[0123]
[4567]
[891011]]
[[12131415]
[16171819]
[20212223]]
[[24252627]
[28293031]
[32333435]]]
可见axis=0时⼆维数组整体堆叠,顺序:第⼀个3×4数组就是三维数组⾥的第⼀块,第⼆个3×4数组第⼆块…
[[[0123]
[12131415]
[24252627]]
[[4567]
[16171819]
[28293031]]
[[891011]
[20212223]
[32333435]]]
axis=1时按⾏⼀次堆叠,顺序:第⼀个3×4数组的第⼀⾏、第⼆个3×4数组的第⼀⾏、第三个3×4数组的第⼀⾏时三维数组⾥的第⼀块,第⼀个3×4数组的第⼆⾏…
[[[0123]
[12131415]
[24252627]]
[[4567]
[16171819]
[28293031]]
[[891011]
[20212223]
[32333435]]]
axis=2时按每个元素⼀次堆叠,顺序:第⼀个3×4数组的第⼀⾏的第⼀个元素是三维数组⾥的第⼀块的第⼀⾏的第⼀个元素、第⼆个3×4数组的第⼀⾏的第⼀个元素是三维数组⾥的第⼀块的第⼀⾏的第⼆个元素、第三个3×4数组的第⼀⾏的第⼀个元素是三维数组⾥的第⼀块的第⼀⾏的第三个元素组成三维数组⾥的第⼀块的第⼀⾏,第⼀个3×4数组的第⼀⾏的第⼆个元素是三维数组⾥的第⼀块的第⼆⾏的第⼀个元素…
[[[01224]
[11325]
[21426]
[31527]]
[[41628]
[51729]
[61830]
[71931]]
[[82032]
[92133]
[102234]
[112335]]]
axis=-1就是该数组的最后⼀维,在这个数组⾥⾯就是等同于axis=2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。