旋转最后2维的5D数组

2024-06-28 15:36:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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度,但只在最后两个维度上,而不改变它们的位置。所以输出[0,0,0]应该如下所示:

^{pr2}$

我所做的:

out = np.rot90(a, 2)
out[0,0,0]:
array([[40, 41],
       [42, 43]])

rot90函数显然会旋转整个数组。在

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


Tags: 函数importnumpyforasnp数组out
2条回答

如果我正确地理解了这个问题,你可以把元素沿着最后两个轴的排列颠倒过来,就像这样-

a[:,:,::-1,::-1]

您也可以将最后两个轴合并为最后一个轴的二维数组,然后沿其反转元素并重新调整形状,如-

^{pr2}$

样本运行-

In [141]: a[0][0]
Out[141]: 
array([[57, 64, 69],
       [41, 28, 89]])

In [142]: out1 = a[:,:,::-1,::-1]

In [143]: out2 = a.reshape(-1,np.prod(a.shape[-2:]))[:,::-1].reshape(a.shape)

In [144]: out1[0][0]
Out[144]: 
array([[89, 28, 41],
       [69, 64, 57]])

In [145]: out2[0][0]
Out[145]: 
array([[89, 28, 41],
       [69, 64, 57]])

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

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

如果您的NumPy版本没有带有axes参数和np.rot90参数,那么还有其他选择。在

一种方法是使用索引:

^{pr2}$

rot90翻转数组的第一个两个轴,因此要使用它,您需要转置(以反转轴)、旋转并再次转置。例如:

np.rot90(a.T, 2).T

相关问题 更多 >