如何将形状为(m,n)的Numpy数组转换为形状(m,n,l)的同值扩展数组?
解决方案:将(m,n) Numpy数组转换为(m,n,l)数组
你需要将原数组的每个元素在最后一个维度上重复l次,以下是几种简洁的实现方式,包括单行方案:
方法1:np.expand_dims + np.repeat(直观高效)
这是最直接的单行实现,先给原数组增加一个长度为1的最后维度,再沿该维度重复l次:
import numpy as np m = 2 n = 3 l = 2 a = np.array([[1,2,3],[4,5,6]]) b = np.repeat(np.expand_dims(a, axis=-1), l, axis=-1)
运行结果符合预期:
array([[[1, 1], [2, 2], [3, 3]], [[4, 4], [5, 5], [6, 6]]])
方法2:np.tile + 维度扩展
利用np.tile实现重复操作,同样是单行代码:
b = np.tile(a[..., np.newaxis], (1, 1, l))
其中a[..., np.newaxis]是np.expand_dims(a, axis=-1)的简写,先将数组转为(m,n,1)形状,再在最后一个维度复制l次。
方法3:广播视图(无额外内存开销)
如果不需要修改数组内容,仅需该形状的视图,可以用np.broadcast_to,不会额外占用内存:
b = np.broadcast_to(a[..., None], (m, n, l))
注意:此方法生成的是原数组的视图,修改b会同步修改原数组a;若需要独立的数组对象,优先选择前两种方法。
内容的提问来源于stack exchange,提问作者g00dds
相关产品推荐
相关产品推荐

