Python等尺寸NumPy数组按单元拼接及迭代拼接实现咨询
NumPy按单元拼接及迭代拼接实现方案
1. 基础多数组按单元拼接
你需要的对应位置元素拼接需求,可以直接用NumPy内置堆叠方法实现,有两种常用写法:
- 方法1:使用
np.dstack,专门沿深度方向(第三维)堆叠同尺寸二维数组,完全匹配你的需求
import numpy as np # 输入为NumPy数组 a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) # 拼接得到结果 c = np.dstack([a, b])
输出的c维度为(2, 2, 2),内容和你给出的期望输出完全一致,如果需要转换为纯Python列表格式,调用c.tolist()即可。
- 方法2:使用通用堆叠方法
np.stack,指定堆叠轴为2,效果和np.dstack完全一致,扩展性更强:
c = np.stack([a, b], axis=2)
2. 迭代拼接实现
针对有新数组需要不断追加拼接的场景,分两种方案可选:
方案1:提前收集所有数组一次性拼接(性能最优)
如果能提前拿到所有待拼接的数组,建议先把所有数组存入同一个列表,最后一次性拼接,避免频繁创建新数组带来的性能损耗:
# 收集所有待拼接数组 all_arrays = [a, b, np.array([[9,10], [11,12]])] e = np.dstack(all_arrays)
输出的e维度为(2, 2, 3),符合你的预期输出。
方案2:动态迭代拼接(适合未知总拼接数量的场景)
如果需要来一个新数组拼接一次,直接复用np.dstack即可,不需要手动调整维度,写法非常简洁:
# 已有拼接结果c c = np.dstack([a, b]) # 新输入数组d d = np.array([[9,10], [11,12]]) # 追加拼接 e = np.dstack([c, d])
也可以用np.concatenate实现,需要手动给新数组增加第三维匹配维度:
e = np.concatenate([c, d[..., np.newaxis]], axis=2)
两种写法效果完全一致。
注意:如果需要拼接的数组数量非常多(>100),优先选择提前收集一次性拼接的方案,迭代拼接的性能会随着数组数量增加逐渐下降。
内容的提问来源于stack exchange,提问作者elexhobby
相关产品推荐
相关产品推荐

