如何将形状为(26, 396, 1, 1, 6)的5维数组重塑为(10296, 6)的2维数组
5维数组按指定规则降维为2维数组的解决方案
你遇到的reshape顺序不符问题,根源是numpy默认reshape采用C风格行优先的内存遍历逻辑,直接调用不会优先按你预期的第一维度分块堆叠。可以用以下两种方案实现需求:
- 方案1:直观拼接法(无顺序歧义,最推荐)
先移除中间两个长度为1的冗余维度,再沿着第一维度将所有396行的块依次纵向拼接:
import numpy as np # 移除axis=2、axis=3的单维度,得到形状为(26, 396, 6)的数组 b_squeezed = np.squeeze(b, axis=(2, 3)) # 沿第0轴拼接26个(396,6)的数组块 a = np.concatenate(b_squeezed, axis=0)
- 方案2:指定顺序reshape法
如果希望用reshape实现,可以显式指定遍历顺序,同时先拆分维度避免歧义:
a = b.reshape(26, 396, 6).reshape(26*396, 6, order='C')
你可以用小尺寸测试数组验证结果:比如构造形状为(2, 2, 1, 1, 2)的数组,每个第一维度块的元素分别赋值为[[1,2],[3,4]]和[[5,6],[7,8]],执行上述代码后得到的结果为[[1,2],[3,4],[5,6],[7,8]],完全符合预期的堆叠规则。
内容的提问来源于stack exchange,提问作者Asbjoern Lund
相关产品推荐
相关产品推荐

