如何将指定2D NumPy数组重塑为目标3D NumPy数组?
解决方法
这其实是个维度重组的问题,核心是理清原数组和目标数组的维度对应关系。我们可以通过转置加重塑的组合操作一步到位实现需求:
原数组的形状是 (3, 4),目标数组是 (2, 2, 3)。先把原数组转置(行变列),得到形状为 (4, 3) 的数组——此时每一行正好是目标数组里需要的子数组(比如 [0,4,8]、[1,5,9] 这些),接着把这个转置后的数组重塑成 (2, 2, 3) 就完美匹配目标结构了。
代码示例
import numpy as np # 原2D数组 original_arr = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]) # 转置后重塑,得到目标3D数组 target_arr = original_arr.T.reshape(2, 2, 3) print(target_arr)
运行后输出的结果就是你想要的:
array([[[ 0, 4, 8], [ 1, 5, 9]], [[ 2, 6, 10], [ 3, 7, 11]]])
另一种等价写法(用维度转置)
如果你更习惯用维度调整的思路,也可以先把原数组重塑为 (3, 2, 2),再调整维度顺序:
target_arr = original_arr.reshape(3, 2, 2).transpose(2, 1, 0)
这个操作的逻辑是:先把原数组的4列拆成2组(每组2列),得到形状 (3,2,2),然后通过transpose(2,1,0)把维度顺序从「行、组、组内列」改成「组、组内列、行」,最终得到目标形状。
两种方法都能达到目的,第一种相对更直观易懂~
内容的提问来源于stack exchange,提问作者TaxpayersMoney
相关产品推荐
相关产品推荐

