如何有效地翻转多维numpy数组?

7
假设我有一个数组
>>> a  
[[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]

我想要将一个物体绕着轴翻转,以达到...
>>> aflipped  
[[[2, 1, 0], [5, 4, 3], [8, 7, 6]], [[12, 11, 10], [15, 14, 13], [18, 17, 16]]]

我希望可以使用某种技术来完成这个操作。
>>> aflipped=a[::-1][::1][::1]

或者

>>>> aflipped=flipud(a)

我希望使用notation进行翻译,因为我知道这种方式非常快速且(重要的是)占用内存低。我的代码已经开始交换了,使用for循环并不理想。

实际上,这是一个4D数组,我只想翻转其中一个轴,但似乎我的选项仅限于前两个轴。有没有一种内存有效的方法来做到这一点?

1个回答

13

像这样的东西:

>>> a = np.array([[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]])
>>> a[:,:,::-1]      #or a[..., ::-1]
array([[[ 2,  1,  0],
        [ 5,  4,  3],
        [ 8,  7,  6]],

       [[12, 11, 10],
        [15, 14, 13],
        [18, 17, 16]]])

时间比较:

>>> %timeit a[:,:,::-1]
1000000 loops, best of 3: 1.53 µs per loop
>>> %timeit a[..., ::-1]
1000000 loops, best of 3: 1.06 µs per loop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接