如何将MxN的NumPy数组Reshape为Mx(N/2)x2三维数组?
问题描述
现有数组:
import numpy as np a = np.array([[1,2,3,4], [9,10,11,12], [17,18,19,20], [25,26,27,28]])
期望转换为三维数组,输出形式如下:
array([[[ 1, 2], [9, 10], [17, 18], [25, 26]], [[ 3, 4], [11, 12], [19, 20], [27, 28]]])
原数组为M×N结构,目标是将其转换为(N/2)×M×2的三维数组(注:根据期望输出实际形状为(2,4,2),与描述的M×(N/2)×2存在维度顺序差异)。尝试了以下代码但未得到预期效果:
data.reshape(data.shape[0], data.shape[1]//2, 2)
解决方案
你的reshape调用得到的是(4,2,2)形状的数组,这是因为reshape默认按行优先顺序重新排列元素,会把每一行的前两个和后两个元素分别组成子数组,不符合需求。
要实现期望的结构,有两种简单方法:
方法1:按列拆分后组合
使用np.split按列轴(axis=1)将原数组拆分为2个部分,再转换为三维数组:
result = np.array(np.split(a, 2, axis=1))
方法2:调整reshape后的维度顺序
先按你的方式reshape得到(4,2,2)的数组,再通过transpose调换维度顺序,将第二个维度移到最前面:
result = a.reshape(4, 2, 2).transpose(1, 0, 2)
两种方法最终得到的结果形状都是(2,4,2),与期望输出完全一致。
内容的提问来源于stack exchange,提问作者Petar Ulev
相关产品推荐
相关产品推荐

