如何将形状为(629,5)和(629,6)的两个2D数组转换为(629,5,6)的3D数组?
如何将形状为(629,5)和(629,6)的二维数组转为(629,5,6)的三维数组?
需求说明
需要把两个二维数组转换为指定形状的三维数组:
- 数组1:形状
(629, 5) - 数组2:形状
(629, 6) - 目标数组:形状
(629, 5, 6),其中目标数组的第i个元素是由数组2的第i行重复5次组成的二维数组。
输入示例
# 形状(3,5)的数组 arr1 = [ [2, 5, 6, 7, 8], [3, 5, 6, 7, 8], [4, 5, 6, 7, 8] ] # 形状(3,6)的数组 arr2 = [ [2, 5, 6, 7, 8, 9], [3, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9] ]
期望输出示例(形状(3,5,6))
[ [[2, 5, 6, 7, 8, 9], [2, 5, 6, 7, 8, 9], [2, 5, 6, 7, 8, 9], [2, 5, 6, 7, 8, 9], [2, 5, 6, 7, 8, 9]], [[3, 5, 6, 7, 8, 9], [3, 5, 6, 7, 8, 9], [3, 5, 6, 7, 8, 9], [3, 5, 6, 7, 8, 9], [3, 5, 6, 7, 8, 9]], [[4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9]] ]
解决方案
基于NumPy的高效实现(推荐)
NumPy的维度操作和广播特性可以快速完成转换,适合大数据量场景:
- 导入NumPy并转换输入为数组:
import numpy as np arr1_np = np.array(arr1) arr2_np = np.array(arr2)
- 方法一:使用
np.repeat直接重复行
将数组2扩展为(629,1,6)的形状,然后在第二个维度重复5次:
result = np.repeat(arr2_np[:, np.newaxis, :], arr1_np.shape[1], axis=1)
- 方法二:使用广播(内存更高效)
无需实际复制数据,通过广播直接生成目标形状的数组:
result = np.broadcast_to(arr2_np[:, None, :], (arr1_np.shape[0], arr1_np.shape[1], arr2_np.shape[1]))
- 验证结果形状:
print(result.shape) # 输出 (629, 5, 6)
纯Python实现(适合小数据量)
如果不依赖NumPy,可以用列表推导式完成:
result = [] for row in arr2: # 把当前行重复5次,组成三维数组的一行 result.append([row.copy() for _ in range(5)])
内容的提问来源于stack exchange,提问作者Rebel
相关产品推荐
相关产品推荐

