如何从一维NumPy数组创建指定形状的三维数组?
从一维数组生成指定形状的多维数组
给定一维数组:
import numpy as np a = np.array([1, 2, 3])
需要生成形状为(3, 4, 5)的数组b,要求用a中的每个值初始化一个4×5的数组并堆叠,且避免使用循环。目标数组b的结构如下:
array([[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]], [[2, 2, 2, 2, 2], [2, 2, 2, 2, 2], [2, 2, 2, 2, 2], [2, 2, 2, 2, 2]], [[3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3]]])
方法1:利用广播机制(推荐,内存高效)
通过扩展a的维度,再借助NumPy的广播特性自动填充:
# 将a从(3,)扩展为(3,1,1) a_expanded = a.reshape(3, 1, 1) # 广播到目标形状(3,4,5) b = np.broadcast_to(a_expanded, (3, 4, 5))
这种方法不会复制额外数据,内存占用更小。
方法2:使用np.tile重复元素
通过tile函数在指定维度上重复元素:
# 先扩展a的维度为(3,1,1),再在第1轴重复4次、第2轴重复5次 b = np.tile(a.reshape(3,1,1), (1, 4, 5))
方法3:与全1数组相乘
创建(4,5)的全1数组,和扩展维度后的a相乘实现填充:
b = a.reshape(3,1,1) * np.ones((4,5), dtype=a.dtype)
以上三种方法都能得到符合要求的数组b,且全程无需循环操作。
内容的提问来源于stack exchange,提问作者J. Daay
相关产品推荐
相关产品推荐

