numpy数组的拼接
拼接或连接Numpy中的数组主要由np.concatenate,np.vstack,np.hstack,np.dstack四个方法来实现实现。
np.concatenate()函数
np.concatenate()是numpy库中的一个函数,用于将多个数组沿指定轴连接起来。要注意拼接的数组维度一致。其语法如下:
numpy.concatenate((a1, a2, ...), axis=0, out=None)
参数说明:
(a1, a2, ...)
: 要连接的数组序列,可以是元组,也可以是列表。axis
: 指定沿哪个轴连接数组,默认为0,即沿第一个维度(行)连接。如果设为1,则沿第二个维度(列)连接。out
: 可选参数,指定输出结果的数组。如果不指定,则会新创建一个数组来存储结果。
例如,有x,y两个一维数组,使用np.concatenate()拼接:
import numpy as np
x = np.array([1,2,3])
y = np.array([3,2,1])
con = np.concatenate([x,y]) #这里的参数可以使用列表,也可以使用元组np.concatenate((x,y))
print(con)
运行结果:
[1, 2, 3, 3, 2, 1]
也可以一次使用两个以上的数组:
z = [88,88,88]
con = np.concatenate([x,y,z])
print(con)
运行结果:
[ 1, 2, 3, 3, 2, 1, 88, 88, 88]
np.concatenate()默认是从第一个维度拼接(即沿着行顺序连接),如下所示:
grid1 = np.array([[1,2,3],[4,5,6]])
grid2 = np.array([[8,8,8]])
con = np.concatenate([grid1,grid2])
print(con)
运行结果:
[[1, 2, 3] [4, 5, 6] [8, 8, 8]]
要从第二个维度拼接(即沿着列顺序连接),可以使用axis = 1,如下所示:
grid1 = np.array([[1,2,3],[4,5,6]])
grid2 = np.array([[8,8],[9,9]])
np.concatenate([grid1,grid2], axis = 1)
print(con)
运行结果:
[[1, 2, 3, 8, 8]
[4, 5, 6, 9, 9]]
需要注意的是,沿列顺序拼接,行个数需保持一致。同理,沿行顺序拼接,数组的列个数须保持一致。
np.vstack()函数
np.vstack()用于沿着行顺序堆叠数组构成一个新的数组。其语法如下:
numpy.vstack((tup,))
参数说明:
(tup,)
: 要堆叠的数组序列。
例如,将x和grid两个数组行顺序
x = np.array([1,2,3])
grid = np.array([[4,5,6],[7,8,9]])
#行顺序拼接
con = np.vstack([x,grid])
print(con)
运行结果:
[[1 2 3]
[4 5 6]
[7 8 9]]
np.hstack()函数
np.hstack()用于沿着列顺序堆叠数组构成一个新的数组。其语法如下:
numpy.hstack((tup,))
参数说明:
(tup,)
: 要堆叠的数组序列。
x = np.array([[9,9],[8,8]])
grid = np.array([[6],[6]])
#列顺序拼接
con = np.hstack([x,grid])
print(con)
[[9 9 6]
[8 8 6]]
沿着固定的维度处理数组时,使用np.vstack()和np.hstack()更方便。
np.dstack()
np.dstack()
用于按深度方向(沿着第三个维度)堆叠数组构成一个新的数组。其语法如下:
numpy.dstack((tup,))
参数说明:
(tup,)
: 要堆叠的数组序列。
以下分别展示了将一维、二维、三维的数组拼接成一个三维数组:
# 一维
x = np.array([1,2,3])
y = np.array([4,5,6])
con = np.dstack((x,y))
print(con)
运行结果:
[[[1 4]
[2 5]
[3 6]]]
# 二维
x = np.array([[1,2,3,4],[4,3,2,1]])
y = np.array([[5,6,7,8],[8,7,6,5]])
con = np.dstack((x,y))
print(con)
运行结果:
[[[1 5]
[2 6]
[3 7]
[4 8]]
[[4 8]
[3 7]
[2 6]
[1 5]]]
# 三维
x = np.array([
[
[1,2,3],
[3,2,1]
],
[
[4,5,6],
[6,5,4]
],
[
[7,8,9],
[9,8,7]
]
])
y = np.array([
[
[10,11,12],
[12,11,10]
],
[
[13,14,15],
[15,14,13]
],
[
[16,17,18],
[18,17,16]
]
])
con = np.dstack([x,y])
print(con)
运行结果:
[[[ 1 2 3 10 11 12]
[ 3 2 1 12 11 10]]
[[ 4 5 6 13 14 15]
[ 6 5 4 15 14 13]]
[[ 7 8 9 16 17 18]
[ 9 8 7 18 17 16]]]