我有一个大小为(3,2,2,2,2,2)的5D数组'a'。

import numpy as np
a = np.arange(48).reshape(3,2,2,2,2)
a[0,0,0]:
array([[0, 1],
       [2, 3]])

我想做的是将此5D阵列旋转180度,但仅在最后两个维度上旋转,而位置不变。因此output [0,0,0]应该看起来像这样:
out[0,0,0]:
array([[3, 2],
       [1, 0]])

我尝试过的是:
out = np.rot90(a, 2)
out[0,0,0]:
array([[40, 41],
       [42, 43]])
rot90函数显然可以旋转整个数组。

注意:如果可能,我想避免使用for循环

最佳答案

要将最后两个轴旋转180度,请将axes=(-2, -1)传递给np.rot90:

>>> a180 = np.rot90(a, 2, axes=(-2, -1))
>>> a180[0, 0, 0]
array([[3, 2],
       [1, 0]])

如果您的NumPy版本没有带axesnp.rot90参数,则可以选择。

一种方法是使用索引:
a180 = a[..., ::-1, ::-1]
rot90翻转数组的前两个轴,因此要使用它,您需要转置(反转轴),旋转并再次转回。例如:
np.rot90(a.T, 2).T

关于python - 最后2维旋转5D阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34614532/

10-09 03:50