调用np.tile()时维度意外塌陷,如何生成目标多维numpy数组?
解决Numpy多维数组创建问题
你遇到的问题源于np.tile的维度匹配规则:原数组a是一维的(2,),当传入[9,2,43]作为重复次数时,Numpy会自动给a补前导维度变成(1,1,2),之后每个维度按重复次数相乘,最终得到(9,2, 2*43) = (9,2,86)的数组。
要生成形状为(9,2,43,2)、每个位置都是[255,0]的4维数组,有几种简单方法:
方法1:用np.full直接创建(最直观)
np.full可以直接指定目标形状,并将指定值填充到每个位置,自动处理维度广播:
import numpy as np a = np.array([255, 0]) mins_and_maxes = np.full((9, 2, 43, 2), a)
验证形状:print(mins_and_maxes.shape) → (9, 2, 43, 2)
方法2:扩展a的维度后用np.tile
先给a添加3个前导维度,让它变成(1,1,1,2),再用tile在对应维度重复:
import numpy as np a = np.array([255, 0]) # 扩展维度,也可以用a.reshape(1,1,1,2)实现 a_expanded = a[np.newaxis, np.newaxis, np.newaxis, :] mins_and_maxes = np.tile(a_expanded, (9, 2, 43, 1))
方法3:用广播机制(内存更高效)
如果不需要实际复制数据(仅需可访问的数组视图),可以用np.broadcast_to,它不会额外占用内存:
import numpy as np a = np.array([255, 0]) # 先扩展a的维度到(1,1,1,2),再广播到目标形状 mins_and_maxes = np.broadcast_to(a[None, None, None, :], (9, 2, 43, 2))
内容的提问来源于stack exchange,提问作者Paul Reiners
相关产品推荐
相关产品推荐

