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

Numpy如何展平子数组并保留子数组原有位置同时维持目标维度

解决方案

你需要配合reshape和transpose调整数组维度顺序后再做形状转换,就可以实现目标效果,不需要手动指定每个块的位置。

针对你给出的示例,实现代码如下:

import numpy as np
a = np.array([[[0,1],[2,3]],[[4,5],[6,7]],[[8,9],[10,11]],[[12,13],[14,15]]])

# 转换逻辑
result = a.reshape(2, 2, 2, 2).transpose(0, 2, 1, 3).reshape(4, 4)
print(result)

运行后输出的结果和你预期完全一致:

[[ 0  1  4  5]
 [ 2  3  6  7]
 [ 8  9 12 13]
 [10 11 14 15]]

通用逻辑说明

你提到输入数组尺寸不固定但可以提前获取维度信息,只要按实际需求调整reshape的拆分规则和transpose的轴顺序即可适配所有场景:

  • 直接用reshape不符合需求是因为Numpy默认按C顺序(行优先)展开数组,会优先遍历最后一个维度,直接平铺会打乱你需要的块排列顺序
  • 你可以把转换逻辑拆分为「拆分维度→调整轴顺序→合并维度」三步,所有类似的块拼接需求都可以用这套逻辑实现,不需要手动调用concatenate指定每个块的位置。

内容的提问来源于stack exchange,提问作者Blikpils

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:00:01