Numpy中stack(),hstack(),vstack()函数的使用方法

stack()与hstack(),vstack()不同,前者堆叠数组是联结(join),而后两者是串联(concatenation),可以体会一下。

1. stack()函数

按照指定的轴对数组序列进行联结。
语法格式:numpy.stack(arrays, axis=0, out=None)
参数:
arrays :数组序列,数组的形状(shape)必须相同

代码:

import numpy as np
a=[[1,2,3],
   [4,5,6]]
b=[[1,2,3],
   [4,5,6]]
c=[[1,2,3],
   [4,5,6]]
print("a=",a)
print("b=",b)
print("c=",c)

d=np.stack((a,b,c),axis=0)
print('"axis=0":\n',d)

d=np.stack((a,b,c),axis=1)
print('"axis=1":\n',d)

d=np.stack((a,b,c),axis=2)
print('"axis=2":\n',d)

结果:
Numpy中stack(),hstack(),vstack()函数的使用方法_第1张图片
(a,b,c)的shape为(3*2*3),既然是堆叠,那么

当axes=0,就是以0这个维度的元素为单位,[[1 2 3] [4 5 6]]0、[[1 2 3] [4 5 6]]1、[[1 2 3] [4 5 6]]2自成一个单位,按下标[0,1,2]顺序排(堆)起来即可,结果的shape为(3*2*3);

当axes=1,就是以1这个维度的元素为单位[1 2 3]0、[4 5 6]1、[1 2 3]0、[4 5 6]1、[1 2 3]0、[4 5 6]1,按下标[[0,0,0],[1,1,1]]进行堆叠即可,结果的shape为(2*3*3);

当axes=2,就是以2这个维度的元素为单位10、21、32、43、54、65、10、21、32、43、54、65、10、21、32、43、54、65,按下标[[[0,0,0],[1,1,1],[2,2,2]],[[3,3,3],[4,4,4],[5,5,5]]]进行堆叠即可,结果的shape为(2*3*3);

文档中表述的也是这个意思。
numpy.stack

2. hstack()函数

语法格式:numpy.hstack(tup)
参数:
tup:ndarrays数组序列,除了一维数组的堆叠可以是不同长度外,其它数组堆叠时,除了第二个轴的长度可以不同外,其它轴的长度必须相同。

原因在于一维数组进行堆叠是按照第一个轴进行堆叠的,其他数组堆叠都是按照第二个轴堆叠的。

a = np.array((1,2,3))
b = np.array((2,3,4))
np.hstack((a,b))
输出:
array([1, 2, 3, 2, 3, 4])
a = np.array([[1],[2],[3]])
b = np.array([[2],[3],[4]])
np.hstack((a,b))
输出:
array([[1, 2],
       [2, 3],
       [3, 4]])

代码:

import numpy as np
a=[[1,2,3],
   [4,5,6]]
b=[[1,2,3],
   [4,5,6]]
c=[[1,2,3],
   [4,5,6]]
print(np.hstack((a,b,c)))

结果:
这里写图片描述
numpy.hstack

3. vstack()函数

沿着第一个轴堆叠数组。
语法格式:numpy.vstack(tup)
参数:
tup:ndarrays数组序列,如果是一维数组进行堆叠,则数组长度必须相同;除此之外,其它数组堆叠时,除数组第一个轴的长度可以不同,其它轴长度必须一样。

a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a,b))
输出:
array([[1, 2, 3],
       [2, 3, 4]])
a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))
输出:
array([[1],
       [2],
       [3],
       [2],
       [3],
       [4]])

代码:

import numpy as np
a=[[1,2,3],
   [4,5,6]]
b=[[1,2,3],
   [4,5,6]]
c=[[1,2,3],
   [4,5,6]]
print(np.vstack((a,b,c)))

结果:
这里写图片描述
numpy.vstack

你可能感兴趣的:(Python)