numpy中的数组拼接、数组合并方法总结

零. 维度和轴

在这里插入图片描述
Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2…

c = np.array([[[1,2,3], [4,5,6]]])
c.ndim   # 3
# 三维数组

c.shape  # (1, 2, 3)
# 在axis 0 上的长度为1,在axis 1上的长度为2, 在axis 2上的长度为3.
# 或者可以理解为1层2行3列

一、append()

numpy.append(arr, values, axis=None)

  • The arr can be an array-like object or a NumPy array. The values are appended to a copy of this array.
    arr可以是类似数组的对象或NumPy数组。 这些值将附加到此数组的副本中。
  • The values are array-like objects and it’s appended to the end of the “arr” elements.
    这些是类似数组的对象,并附加到“ arr”元素的末尾。
  • The axis specifies the axis along which values are appended. If the axis is not provided, both the arrays are flattened.
    指定沿其附加值的轴。 如果未提供轴,则将两个阵列展平。

1. 展平两个数组(Flattening Two Arrays)

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[10, 20], [30, 40]])

# no axis provided, array elements will be flattened
arr_flat = np.append(arr1, arr2)
 
print(arr_flat)  # [ 1  2  3  4 10 20 30 40]

2. 沿轴合并(Merging Along Axis)

arr_merged = np.append([arr1, arr2], axis=0)
# 当 2×2 数组沿 x 轴合并时,输出数组大小为 4×2 
Merged 2x2 Arrays along Axis-0:
[[ 1  2]
 [ 3  4]
 [10 20]
 [30 40]]
 
arr_merged = np.append([arr1, arr2], axis=1)
# 当 2×2 数组沿 y 轴合并时,输出数组大小为 2×4
Merged 2x2 Arrays along Axis-1:
[[ 1  2 10 20]
 [ 3  4 30 40]]

二、concatenate

concatenate(a_tuple, axis=0, out=None)

  • a_tuple:对需要合并的数组用元组的形式给出
  • axis: 沿指定的轴进行拼接,默认0,即第一个轴
arr1 = np.array([[1,2,3], [4,5,6]]) # shape: (2, 3)
arr2 = np.array([[7,8,9], [11,12,13]])

np.concatenate((arr1, arr2)) # axis=0
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])

np.concatenate((arr1, arr2),axis=1)  # 这里沿第二个轴,即列方向进行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])

arr3 = np.array([[14,15,16]]) # shape: (1, 3)
# 一般进行 concatenate 操作的 array 的 shape 需要一致
# 但如果 array 在拼接 axis 方向的 size 不一样,也可以完成
# arr3 虽然在 axis_0 方向的长度不一致,但 axis1 方向上一致,所以沿 axis_0 可以拼接
np.concatenate((arr1, arr3))  # √
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [14, 15, 16]])
    
# arr3 和 arr1 在 axis_0 方向的长度不一致,报错
np.concatenate((arr1, arr3), axis=1)  

三、hstack, vstack

np.hstack((arr1,arr2))  # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])
 
np.vstack((arr1,arr2))  # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])

四、column_stack, row_stack

np.column_stack((arr1,arr2))  # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
   [ 4, 5, 6, 11, 12, 13]])
 
np.row_stack((arr1,arr2))  # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
   [ 4, 5, 6],
   [ 7, 8, 9],
   [11, 12, 13]])

五、 np.r_, np.c_

np.r_[arr1,arr2]   # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
 
np.c_[arr1,arr2]  # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])

六、总结

方法拼接方式
concatenate提供了axis参数,用于指定拼接方向
append默认先ravel再拼接成一维数组,也可指定axis
hstack水平拼接,沿着行的方向,对列进行拼接
vstack垂直拼接,沿着列的方向,对行进行拼接
column_stack水平拼接,沿着行的方向,对列进行拼接
row_stack垂直拼接,沿着列的方向,对行进行拼接
r_垂直拼接,沿着列的方向,对行进行拼接
c_水平拼接,沿着行的方向,对列进行拼接

对于两个shape一样的二维array来说:
增加行(对行进行拼接)的方法有:

array([[ 1, 2, 3],
    [ 4, 5, 6],
    [ 7, 8, 9],
    [11, 12, 13]])
np.concatenate((ar1, ar2),axis=0)
np.append(ar1, ar2, axis=0)
np.vstack((ar1,ar2))
np.row_stack((ar1,ar2))
np.r_[ar1,ar2]

增加列(对列进行拼接)的方法有:

array([[ 1, 2, 3, 7, 8, 9],
    [ 4, 5, 6, 11, 12, 13]])
np.concatenate((ar1, ar2),axis=1)
np.append(ar1, ar2, axis=1)
np.hstack((ar1,ar2))
np.column_stack((ar1,ar2))
np.c_[ar1,ar2]    

参考

https://www.numpy.org.cn/reference/routines/array-manipulation.html#%E7%BB%84%E5%90%88%E6%95%B0%E7%BB%84
https://www.jb51.net/article/161997.htm
https://blog.csdn.net/u011913417/article/details/106904183

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拼接合并是将多个数组组合成一个更大的数组的操作。在numpy,有几种方法可以完成这个任务: 1. concatenate函数:可以将两个或多个数组在指定轴上拼接起来。例如,将两个一维数组拼接成一个更大的一维数组: ``` python import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.concatenate((a, b)) print(c) # 输出 [1 2 3 4 5 6] ``` 也可以将两个二维数组在指定轴上拼接起来: ``` python import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) c = np.concatenate((a, b), axis=0) print(c) # 输出 [[1, 2], [3, 4], [5, 6]] ``` 2. vstack和hstack函数:vstack函数将两个数组垂直堆叠(行方向),而hstack函数将两个数组水平堆叠(列方向)。例如: ``` python import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.vstack((a, b)) print(c) # 输出 [[1 2 3], [4 5 6]] a = np.array([[1], [2], [3]]) b = np.array([[4], [5], [6]]) c = np.hstack((a, b)) print(c) # 输出 [[1 4], [2 5], [3 6]] ``` 3. stack函数:可以将多个数组沿着一个新的轴(维度)进行堆叠。例如: ``` python import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.stack((a, b), axis=0) print(c) # 输出 [[1 2 3], [4 5 6]] a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.stack((a, b), axis=1) print(c) # 输出 [[1 4], [2 5], [3 6]] ``` 4. append函数:可以将一个数组添加到另一个数组的末尾。例如: ``` python import numpy as np a = np.array([1, 2, 3]) b = np.array([[4, 5], [6, 7]]) c = np.append(b, a.reshape(1, -1), axis=0) print(c) # 输出 [[4 5], [6 7], [1 2 3]] ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值