如何调整NumPy使用dstack堆叠数组后得到的维度顺序
问题根源
np.dstack默认会将输入的1维数组先自动扩展为(1, N, 1)形状再沿第三轴堆叠,所以6个形状为(6042,)的数组堆叠后自然得到(1, 6042, 6)的结果,符合dstack的设计逻辑。- 你之前的reshape代码报错是因为混淆了数组索引和数组形状属性:
train_x[1]是取数组第0维索引为1的元素,而你当前train_x第0维长度只有1,自然触发越界错误;你要获取维度长度应该调用train_x.shape属性,且直接用reshape调整会打乱数据的内存顺序,不适合用来调整维度顺序。
正确解决方案
方案1:堆叠时直接生成目标形状(推荐)
不用dstack,改用np.stack并指定堆叠轴为1,一步得到(6042, 1, 6)的数组:
train_x = np.stack([train_data['gx'],train_data['gy'], train_data['gz'], train_data['ax'],train_data['ay'], train_data['az']], axis=1)
方案2:对已有的(1, 6042, 6)数组调整维度
如果已经用dstack生成了数组,可以用transpose调换维度顺序,不会打乱数据:
# 原维度顺序为 (轴0:1, 轴1:6042, 轴2:6),调换为 (轴1, 轴0, 轴2) 即可得到目标形状 new_train = train_x.transpose(1, 0, 2)
也可以先去掉冗余的第0维,再在中间插入新维度:
# 先squeeze去掉长度为1的第0维得到(6042,6),再在第1位插入长度为1的维度 new_train = np.expand_dims(train_x.squeeze(0), axis=1)
内容的提问来源于stack exchange,提问作者apin pipin
相关产品推荐
相关产品推荐

