如何使用numpy来翻转这个数组?

时间:2017-01-29 00:22:08

标签: python python-2.7 numpy

假设我有一个数组

a = array([[[ 29,  29,  27],
            [ 36,  38,  40],
            [ 86,  88,  89]],
           [[200, 200, 198],
            [199, 199, 197]
            [194, 194, 194]]])

我希望在列表列表中从左到右翻转第3个元素,这样就会变得像

b = array([[[ 29,  29,  89],     # 27 became 89
            [ 36,  38,  40],
            [ 86,  88,  27]],    # 89 became 27
           [[200, 200, 194],     # 198 became 194
            [199, 199, 197],
            [194, 194, 198]]])   # 194 became 198

我查了NumPy手册,但仍无法找到解决方案,.flip和.fliplr在这种情况下看起来很合适,但是如何使用它们?

1 个答案:

答案 0 :(得分:2)

使用以下命令对数组进行索引以选择子数组:

> a[:,:,-1]
array([[198, 197, 194],
       [ 27,  40,  89]])

这将选择a第三维的最后一个元素。子阵列的形状为(2,3)。然后使用以下方法反转选择:

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

第二个切片[:,::-1]沿着第一个维度([:])获取所有内容,沿第二个维度获取所有元素,但是反转([::-1])。切片语法基本上是从第一个元素开始,转到最后一个元素([:]),但是以相反的顺序([::-1])执行。您可以伪代码将其写为[start here : end here : use this step size]-1告诉它向后走。

并将其分配给原始数组的第一个切片。这会更新/覆盖a

的原始值
a[:,:,-1] = a[:,:,-1][:,::-1]

> a
array([[[ 29,  29,  89],
        [ 36,  38,  40],
        [ 86,  88,  27]],

       [[200, 200, 194],
        [199, 199, 197],
        [194, 194, 198]]])