如何无循环/单循环实现特定方式的NumPy数组重塑?
无循环重塑NumPy数组的解决方案
可以通过三步向量化操作完成转换,完全不需要循环,核心思路是先拆分原数组的行,再调整维度顺序,最后展平:
import numpy as np # 原数组 arr = np.array([ [1,2,6,3,2,5], [9,4,7,3,2,6], [8,4,6,3,2,6], [9,5,0,4,5,2], [0,5,2,6,4,2], [8,6,2,5,7,4] ]) # 步骤1:将每行拆分为3个长度为2的子块,形状变为(6, 3, 2) reshaped = arr.reshape(6, 3, 2) # 步骤2:调整维度顺序,将子块的维度移到最前面,形状变为(3, 6, 2) transposed = reshaped.transpose(1, 0, 2) # 步骤3:展平为目标形状(3, 12) result = transposed.reshape(3, -1) print(result)
输出结果与预期完全一致:
[[1 2 9 4 8 4 9 5 0 5 8 6] [6 3 7 3 6 3 0 4 2 6 2 5] [2 5 2 6 2 6 5 2 4 2 7 4]]
操作逻辑对应转换模式:
reshape(6,3,2):把原数组每行的6个元素拆成3组(每组2个),对应你标注的[x11,x12]、[x13,x14]、[x15,x16]这类子块。transpose(1,0,2):将维度顺序从「原行→子块→子块元素」调整为「子块→原行→子块元素」,这样第一个维度就对应结果的3行,每个维度下包含所有原行的对应子块。reshape(3,-1):把每个子块维度下的(6,2)二维结构直接展平成12个元素的行,得到目标拼接效果。
内容的提问来源于stack exchange,提问作者viator93
相关产品推荐
相关产品推荐

