我有一个3x5x5
"矩阵" (实际上是3D numpy.ndarray
)。为了我需要执行的一些计算,我必须首先反转这个3D数组的每个子数组,如下所示:
>>> x = np.arange(75).reshape(3, 5, 5)
>>> x
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]],
[[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39],
[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49]],
[[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59],
[60, 61, 62, 63, 64],
[65, 66, 67, 68, 69],
[70, 71, 72, 73, 74]]])
>>> np.array([ np.rot90(k, 2) for k in x ])
array([[[ 24., 23., 22., 21., 20.],
[ 19., 18., 17., 16., 15.],
[ 14., 13., 12., 11., 10.],
[ 9., 8., 7., 6., 5.],
[ 4., 3., 2., 1., 0.]],
[[ 49., 48., 47., 46., 45.],
[ 44., 43., 42., 41., 40.],
[ 39., 38., 37., 36., 35.],
[ 34., 33., 32., 31., 30.],
[ 29., 28., 27., 26., 25.]],
[[ 74., 73., 72., 71., 70.],
[ 69., 68., 67., 66., 65.],
[ 64., 63., 62., 61., 60.],
[ 59., 58., 57., 56., 55.],
[ 54., 53., 52., 51., 50.]]])
正如您所看到的,我找到了一个似乎最初运行良好的解决方案(使用np.rot90
)。但是,在对较大输入进行测试时,此方法变得非常缓慢,尤其是当第一维超过100时。是否有更快/更有效的方法来执行此操作?
谢谢!
答案 0 :(得分:1)
沿着axes 1,2
反转,从而避免循环,并希望在那里获得一些性能提升。因此,可以简单地实现所需的输出 -
x[:,::-1,::-1]