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更进一步,打破了原有矩阵的结构

 

你可能感兴趣的:(#,Python)