文章目录
- 连接数组
- 方法列表
- 方法详解
- numpy.concatenate()
- numpy.stack()
- numpy.vstack()
- numpy.hstack()
- numpy.dstack()
- numpy.column_stack()
- numpy.row_stack()
连接数组
Numpy中数组连接的方法很多,但是各有特点,本文将对各种方法做详细的解释和示例演示。
方法列表
方法 | 说明 |
numpy.concatenate() | 沿现有轴连接一系列数组。 |
numpy.stack() | 沿新轴加入一系列数组。 |
numpy.vstack() | 垂直(按行)按顺序堆叠数组。 |
numpy.hstack() | 水平顺序堆叠数组(按列)。 |
numpy.dstack() | 按顺序深度(沿第三轴)堆叠数组。 |
numpy.column_stack() | 将一维数组作为列堆叠到二维数组中。 |
numpy.row_stack() | 垂直(按行)按顺序堆叠数组。 |
方法详解
numpy.concatenate()
沿现有轴连接一系列数组。
numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")
参数说明:
- a1, a2, …:具有相同形状的数组构成的序列,维度默认为第一个数组的维度,其他数组的维度需要与默认相应。
- axis:接收整数,默认为0(行)。如果axis为None,数组会被延展。
- out:ndarray,如果提供,合并后的数组将会替换目标数组,目标数组的形状必须与合并后的数组形状相同。
- dtype:接收字符串或者dtype,设置结果数组的数据类型。
- casting:可选{no, equiv, safe, same_kind, unsafe},控制可能发生的数据类型转换。
返回值:
- ndarray:合并后的数组。
示例:
>>> import numpy as np
>>> arr01 = np.arange(1, 25).reshape(4,6)
>>> arr02 = np.ones(shape=(4,6))
>>> arr03 = np.zeros(shape=(8,6))
# 横向连接arr01,arr02, axis=0,列数必须相同,将结果替换arr03
# arr03的形状必须和合并后的数组形状一样,才能使用out参数
>>> np.concatenate((arr01, arr02), axis=0, out=arr03)
>>> arr03
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.]])
# 纵向连接arr01, arr02, axis=1,行数必须相同
>>> np.concatenate((arr01, arr02), axis=1)
array([[ 1., 2., 3., 4., 5., 6., 1., 1., 1., 1., 1., 1.],
[ 7., 8., 9., 10., 11., 12., 1., 1., 1., 1., 1., 1.],
[13., 14., 15., 16., 17., 18., 1., 1., 1., 1., 1., 1.],
[19., 20., 21., 22., 23., 24., 1., 1., 1., 1., 1., 1.]])
numpy.stack()
沿新轴加入一系列数组,数组堆叠,堆叠后产生的数组比原数组高一个维度。
numpy.stack(arrays, axis=0, out=None)
参数说明:
- array:具有相同形状的数组构成的序列。
- axis:接收int,轴向,沿该轴堆叠,默认为0。
- out:ndarray,如果提供,合并后的数组将会替换目标数组,目标数组的形状必须与合并后的数组形状相同。
返回值:
- ndarray:堆叠后的数组比原数组高一个维度。
示例:
>>> import numpy as np
>>> arr01 = np.arange(1, 25).reshape(4,6)
>>> arr01
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> arr02 = np.ones(shape=(4,6))
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
axis=0
>>> np.stack((arr01, arr02), axis=0)
array([[[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.]],
[[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.]]])
axis=1
>>> np.stack((arr01, arr02), axis=1)
array([[[ 1., 2., 3., 4., 5., 6.],
[ 1., 1., 1., 1., 1., 1.]],
[[ 7., 8., 9., 10., 11., 12.],
[ 1., 1., 1., 1., 1., 1.]],
[[13., 14., 15., 16., 17., 18.],
[ 1., 1., 1., 1., 1., 1.]],
[[19., 20., 21., 22., 23., 24.],
[ 1., 1., 1., 1., 1., 1.]]])
axis=2
>>> np.stack((arr01, arr02), axis=2)
array([[[ 1., 1.],
[ 2., 1.],
[ 3., 1.],
[ 4., 1.],
[ 5., 1.],
[ 6., 1.]],
[[ 7., 1.],
[ 8., 1.],
[ 9., 1.],
[10., 1.],
[11., 1.],
[12., 1.]],
[[13., 1.],
[14., 1.],
[15., 1.],
[16., 1.],
[17., 1.],
[18., 1.]],
[[19., 1.],
[20., 1.],
[21., 1.],
[22., 1.],
[23., 1.],
[24., 1.]]])
numpy.vstack()
按行(垂直)堆叠数组。
numpy.vstack(tup)
参数说明:
- tup:数组组成的序列,数组必须在列方向具有相同的形状。一维数组必须具有相同的长度。
返回值:
- ndarray:堆叠的数组。
示例:
>>> arr01 = np.arange(1, 25).reshape(4,6)
>>> arr01
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> arr04 = np.ones(shape=(2, 6))
>>> arr04
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
# 按行(垂直)堆叠数组, 堆叠后的数组维度不会增加
>>> np.vstack((arr01, arr04))
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.],
[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.]])
numpy.hstack()
按列(水平)顺序堆叠数组。
numpy.hstack(tup)
参数说明:
- tup:数组组成的序列。数组必须在行方向具有相同的形状。
返回值:
- ndarray:堆叠的后的数组。
示例:
>>> arr01 = np.arange(1, 25).reshape(4,6)
>>> arr01
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> arr05 = np.zeros(shape=(4,2))
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
# 按列(水平)顺序堆叠数组, 行数必须相同
>>> np.hstack((arr01, arr03))
array([[ 1., 2., 3., 4., 5., 6., 0., 0.],
[ 7., 8., 9., 10., 11., 12., 0., 0.],
[13., 14., 15., 16., 17., 18., 0., 0.],
[19., 20., 21., 22., 23., 24., 0., 0.]])
numpy.dstack()
按深度堆叠数组。
numpy.dstack(tup)
参数说明:
- tup:数组组成的序列。
返回值:
- ndarray,堆叠的数组。
示例:
>>> arr01 = np.arange(1, 25).reshape(4,6)
>>> arr01
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> arr02 = np.ones(shape=(4,6))
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
>>> np.dstack((arr01, arr02))
array([[[ 1., 1.],
[ 2., 1.],
[ 3., 1.],
[ 4., 1.],
[ 5., 1.],
[ 6., 1.]],
[[ 7., 1.],
[ 8., 1.],
[ 9., 1.],
[10., 1.],
[11., 1.],
[12., 1.]],
[[13., 1.],
[14., 1.],
[15., 1.],
[16., 1.],
[17., 1.],
[18., 1.]],
[[19., 1.],
[20., 1.],
[21., 1.],
[22., 1.],
[23., 1.],py
[24., 1.]]])
numpy.column_stack()
将一维数组作为列堆叠到二维数组中。
numpy.column_stack(tup)
参数说明:
- tup:一维数组或二维数组构成的序列。
返回值:
- ndarray:堆叠后的二维数组。
示例:
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.column_stack((a,b))
array([[1, 2],
[2, 3],
[3, 4]])
numpy.row_stack()
按行(垂直)堆叠数组
numpy.row_stack(tup)
参数说明:
- tup:数组构成的序列。
返回值:
- ndarray:堆叠后的数组,至少是二维。
示例:
>>> a = np.array([1,2,3,4,5,6]).reshape(3,2)
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
>>> b = np.array([7,8,9,10,11,12]).reshape(3,2)
>>> b
array([[ 7, 8],
[ 9, 10],
[11, 12]])
>>> np.vstack((a,b))
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])