Numpy:数组(Ndarray)操作之数组连接


连接数组

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]])
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值