文章目录

  • 连接数组
  • 方法列表
  • 方法详解
  • 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]])