天天看點

Python:np.stack()、np.vstack()、np.hstack()執行個體講解

import numpy as np

# stack()是按照不同軸的堆疊方式重新堆疊數組

a=[[1,2,3],[4,5,6]]

np.stack(a,axis=0)
# array([[1, 2, 3],
#       [4, 5, 6]])

np.stack(a,axis=1)
# array([[1, 4],
#       [2, 5],
#       [3, 6]])

#可以看出axis=0是把原來的元素按照橫軸的方式排列,axis=1是把原先元素按照縱軸排列

# 更多的例子

a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

np.stack(a,axis=0)
#array([[ 1,  2,  3,  4],
#       [ 5,  6,  7,  8],
#       [ 9, 10, 11, 12]])

np.stack(a,axis=1)
#array([[ 1,  5,  9],
#       [ 2,  6, 10],
#       [ 3,  7, 11],
#       [ 4,  8, 12]])

a=[1,2,3,4]

b=[5,6,7,8]

c=[9,10,11,12]

np.stack((a,b,c),axis=0)
#array([[ 1,  2,  3,  4],
#       [ 5,  6,  7,  8],
#       [ 9, 10, 11, 12]])

np.stack((a,b,c),axis=1)
#array([[ 1,  5,  9],
#       [ 2,  6, 10],
#       [ 3,  7, 11],
#       [ 4,  8, 12]])

a=[[1,2,3],[4,5,6]]

b=[[7,8,9],[10,11,12]]

c=[[13,14,15],[16,17,18]]

np.stack((a,b,c),axis=0)
#array([[[ 1,  2,  3],
#        [ 4,  5,  6]],

#       [[ 7,  8,  9],
#        [10, 11, 12]],

#       [[13, 14, 15],
#        [16, 17, 18]]])

np.stack((a,b,c),axis=1)
#array([[[ 1,  2,  3],
#        [ 7,  8,  9],
#        [13, 14, 15]],

#       [[ 4,  5,  6],
#        [10, 11, 12],
#        [16, 17, 18]]])


#hstack()、vstack()是按元素進行堆疊而不是數組的形狀堆疊,具體與stack的差別後面有個例子

a=[1,2,3]

b=[4,5,6]

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

np.vstack((a,b))
#array([[1, 2, 3],
#       [4, 5, 6]])

#我們來看一下這三個函數對于複雜的矩陣堆疊的差別

a=[[1],[2],[3]]

b=[[4],[5],[6]]

c=[[7],[8],[9]]


np.stack((a,b,c),axis=0)
#array([[[1],
#        [2],
#        [3]],

#       [[4],
#        [5],
#        [6]],

#       [[7],
#        [8],
#        [9]]])


np.stack((a,b,c),axis=1)
#array([[[1],
#        [4],
#        [7]],

#       [[2],
#        [5],
#        [8]],

#       [[3],
#        [6],
3        [9]]])

np.hstack((a,b,c))
#array([[1, 4, 7],
#       [2, 5, 8],
#       [3, 6, 9]])

np.vstack((a,b,c))
#array([[1],
#       [2],
#       [3],
#       [4],
#       [5],
#       [6],
#       [7],
#      [8],
#       [9]])

#再來看一個
a=[[1,2,3],[4,5,6]]

b=[[7,8,9],[10,11,12]]

c=[[13,14,15],[16,17,18]]

np.stack((a,b,c),axis=0)
#array([[[ 1,  2,  3],
#        [ 4,  5,  6]],

#       [[ 7,  8,  9],
#        [10, 11, 12]],

#       [[13, 14, 15],
#        [16, 17, 18]]])

np.stack((a,b,c),axis=1)
#array([[[ 1,  2,  3],
#        [ 7,  8,  9],
#        [13, 14, 15]],

#       [[ 4,  5,  6],
#        [10, 11, 12],
#        [16, 17, 18]]])

np.hstack((a,b,c))
#array([[ 1,  2,  3,  7,  8,  9, 13, 14, 15],
#       [ 4,  5,  6, 10, 11, 12, 16, 17, 18]])

np.vstack((a,b,c))
#array([[ 1,  2,  3],
#       [ 4,  5,  6],
#       [ 7,  8,  9],
#       [10, 11, 12],
#       [13, 14, 15],
#       [16, 17, 18]])

#可以看出stack是在不破壞原有矩陣形狀的情況下按照橫或縱的方式堆疊,hstack和vstack更進一步,打破了原有矩陣的結構