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
相关产品推荐
相关产品推荐

