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

如何将形状(nx, ny, nz)的3D数组重排为(nz, nx, ny)?求无循环Pythonic实现

问题

给定3D NumPy数组A:

import numpy as np
A = np.array([[[1,1,1], [2,2,2]], [[3,3,3],[4,4,4]]])

需要生成一个新的3D数组B,其中每个元素是A在axis=2方向上的切片,预期结果如下:

B = [[[1,2],[3,4]],[[1,2],[3,4]], [[1,2],[3,4]]]

目前已通过循环实现需求,但直接使用A.reshape(3,2,2)无法得到预期结果,希望找到无循环的Pythonic实现方式。

解决方案

可以利用NumPy的轴变换工具实现向量化操作,无需循环,以下是两种高效方法:

方法1:np.moveaxis

直接将原数组的第2轴(axis=2)移动到第0轴的位置,其余轴保持原有顺序:

import numpy as np
A = np.array([[[1,1,1], [2,2,2]], [[3,3,3],[4,4,4]]])
B = np.moveaxis(A, 2, 0)
print(B)

输出:

[[[1 2]
  [3 4]]

 [[1 2]
  [3 4]]

 [[1 2]
  [3 4]]]

方法2:A.transpose()

通过指定轴的新顺序重新排列数组,原数组轴顺序为(0,1,2),我们需要将其调整为(2,0,1):

import numpy as np
A = np.array([[[1,1,1], [2,2,2]], [[3,3,3],[4,4,4]]])
B = A.transpose(2, 0, 1)
print(B)

输出结果与方法1完全一致。

这两种方法都是NumPy原生的向量化操作,比循环更高效,代码也更简洁符合Pythonic风格,同时省去了手动初始化数组和循环赋值的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:35:17