stack(): 数据重组
stack(arrays , axi=0或者1)
arrays可以是数组、列表
axi=0的意思是,把arrays里面的每一个元素arrays[0]~arrays[n]按行重新组合在一起:
a=[[1, 2, 3], [4, 5, 6]]
》np.stack(a,axis=0)
》[[1 2 3]
[4 5 6]]
axi=1的意思是,把arrays里面的每一个元素arrays[0]~arrays[n]按列重新组合在一起
a=[[1, 2, 3], [4, 5, 6]]
》np.stack(a,axis=1)
》[[1 4]
[2 5]
[3 6]]
hstack():按列拼接
hstack(tup),tup可为元组,列表,或者numpy数组。hstack把tup中每一个元素tup[i]按列拼接:
a=[1,2,3]
b=[4,5,6]
》np.hstack((a,b)) # (a,b) = ([1, 2, 3], [4, 5, 6])
》[1 2 3 4 5 6 ]
vstack():按行拼接
vstack(tup),跟hstack一样,tup可为元组,列表,或者numpy数组。
vstack将tup的每一个元素tup[i]按列重新组合在一起。
a=[1,2,3]
b=[4,5,6]
》np.vstack((a,b))
》[[1 2 3]
[4 5 6]]
其实这样描述会有很多误解,比如为什么hstack和vstack明明是拼接,为什么只有一个tup(数组、元组或者列表)。
其实三者的共同之处就是重组,要拼接,其实我们是先将他们用括号(a,b)连接起来了,然后重组的。所以其实它的功能本质上就是数据结构的重组。那么reshape也是重组,有什么区别呢?
stack\hstack\vstack他们的重组,实际上是将里面的元素按行或者按列重新打包,和reshape是重新排列,下图了然。
所谓重组,就是加一个维度,来重组数组。左上第一个其实是特列,在hstack看来,[1 2 3 ] ,[4 5 6]其实本身就是一行按顺序堆叠好的数,也就是在Hstack看来,它就是[1 2 3 4 5 6]。按行堆叠
后者就比较明细那了,[1 2 3 ] ,[4 5 6]按列堆叠。