如何重复拼接NumPy数组?空数组与同尺寸数组顺序拼接方法
嘿,我来帮你搞定这两个NumPy数组拼接的问题!
一、重复拼接NumPy数组
NumPy里有两个常用函数来实现重复拼接,它们的适用场景不太一样,咱们分别拆解:
1. np.tile():以整个数组为单元重复
这个函数会把整个数组当作一个“块”来复制重复,适合你需要把数组整体多份复用的场景。比如你有一个2行3列的数组,想让它垂直方向重复2次、水平方向重复3次:
import numpy as np arr = np.array([[1,2,3],[4,5,6]]) # 第二个参数是重复次数的元组:(行重复次数, 列重复次数) tiled_arr = np.tile(arr, (2, 3)) print(tiled_arr)
输出结果:
[[1 2 3 1 2 3 1 2 3]
[4 5 6 4 5 6 4 5 6]
[1 2 3 1 2 3 1 2 3]
[4 5 6 4 5 6 4 5 6]]
2. np.repeat():元素级别的重复
如果你需要让数组里的每个元素单独重复,就用这个函数。它支持指定轴方向,避免数组被扁平化:
# 沿行方向(axis=0),每个元素重复2次 repeated_row = np.repeat(arr, 2, axis=0) print(repeated_row) # 输出:[[1 2 3] [1 2 3] [4 5 6] [4 5 6]] # 沿列方向(axis=1),每个元素重复3次 repeated_col = np.repeat(arr, 3, axis=1) print(repeated_col) # 输出:[[1 1 1 2 2 2 3 3 3] [4 4 4 5 5 5 6 6 6]]
要是不指定axis参数,数组会先被扁平化再重复,这点要留意哦~
二、依次拼接空数组与多个同尺寸数组
首先得确保空数组的形状和其他数组在拼接轴上兼容:比如垂直拼接(上下拼)时,所有数组的列数必须一致;水平拼接(左右拼)时,行数必须一致。
咱们以垂直拼接为例,具体步骤如下:
import numpy as np # 创建0行3列的空数组(和后面的2行3列数组列数匹配,作为拼接起点) final_array = np.empty((0, 3)) # 准备三个同尺寸的目标数组 array_1 = np.array([[1,2,3],[4,5,6]]) array_2 = np.array([[7,8,9],[10,11,12]]) array_3 = np.array([[13,14,15],[16,17,18]]) # 依次拼接,每次更新final_array final_array = np.concatenate([final_array, array_1], axis=0) final_array = np.concatenate([final_array, array_2], axis=0) final_array = np.concatenate([final_array, array_3], axis=0) print(final_array)
也可以用更简洁的np.vstack()(垂直拼接)或np.hstack()(水平拼接)替代np.concatenate,比如:
final_array = np.vstack([final_array, array_1])
小提醒:
- 如果是水平拼接,空数组要改成
np.empty((2, 0))(2行0列),保证行数和其他数组一致; - 别用
np.zeros()误创建带初始值的数组,用np.empty((0, n))作为拼接起点更合适,它只是占位,不会引入多余的初始值干扰结果。
内容的提问来源于stack exchange,提问作者JungleDiff
相关产品推荐
相关产品推荐

