You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:24:57