numpy数组拼接数组合并方法
Old_D7 人气:0零. 维度和轴
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:
https://blog.csdn.net/u011913417/article/details/106904183
总结
加载全部内容