我有一个类似于这个的3维numpy数组:
a = np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]])
我想做的是散布外部数组中包含的每个2D数组以产生这个结果:
t = np.array([[[1, 2], [5, 6], [9, 10]],
[[3, 4], [7, 8], [11, 12]]])
我可以在这样的Python中做到这一点,但我希望有一个更有效,更numpy版本:
t = np.empty((a.shape[1], a.shape[0], a.shape[2]), a.dtype)
for i, x in np.ndenumerate(a):
t[i[1], i[0], i[2]] = x
正如@UdayrajDeshmukh所说,你可以使用transpose
方法(尽管这个名称在线性代数中唤起了“转置”运算符,但更好地理解为“置换轴”):
>>> t = a.transpose(1, 0, 2)
>>> t
array([[[ 1, 2],
[ 5, 6],
[ 9, 10]],
[[ 3, 4],
[ 7, 8],
[11, 12]]])
新创建的对象t
是一个浅层数组,用不同的索引排列来查看a
的数据。要复制您自己的示例,您需要copy
,例如t = a.transpose(1, 0, 2).copy()
尝试transpose
功能。您只需更改前两个轴即可。
t = np.transpose(a, axes=(1, 0, 2))