如何重塑NumPy数组使行配对且溢出列换行至现有行下方?
如何重塑NumPy数组以保持原行配对并让溢出列换行到下方
问题场景
现有数组:
import numpy as np a = np.array([[1,1,1,3,3,3], [2,2,2,4,4,4]])
使用np.reshape(a, (4, 3))得到的结果是:
array([[1, 1, 1], [3, 3, 3], [2, 2, 2], [4, 4, 4]])
但期望输出是:
array([[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]])
需要让原数组的行保持配对,溢出的列换行到现有行的下方。
问题原因
默认的reshape采用**行优先(C风格)**的元素遍历顺序,会先将第一行的所有元素依次填充到新数组的前两行,再处理第二行,因此打破了原数组两行的配对关系。
解决方案
方法一:轴调整法(通用型)
通过重塑形状调整子块结构,再交换轴让配对行对齐,最后重塑为目标形状:
import numpy as np a = np.array([[1,1,1,3,3,3], [2,2,2,4,4,4]]) # 1. 将原数组拆分为 (2行, 2个3元素子块) 的三维数组 temp = a.reshape(2, 2, 3) # 2. 交换轴0和轴1,让子块中的对应行(原数组的两行)对齐 temp = temp.transpose(1, 0, 2) # 3. 重塑为 (4, 3) 的二维数组 result = temp.reshape(4, 3) print(result)
链式写法更简洁:
result = a.reshape(2, 2, 3).transpose(1, 0, 2).reshape(4, 3)
方法二:分块堆叠法(直观型)
直接将原数组按列拆分为多个子块,再垂直堆叠对应子块:
import numpy as np a = np.array([[1,1,1,3,3,3], [2,2,2,4,4,4]]) # 拆分出前3列和后3列两个子块 block_front = a[:, :3] block_back = a[:, 3:] # 垂直堆叠两个子块,让原数组的配对行连续排列 result = np.vstack([block_front, block_back]) print(result)
内容的提问来源于stack exchange,提问作者imbrizi
相关产品推荐
相关产品推荐

