Обратный порядок вложенного массива в трехмерной матрице - PullRequest
2 голосов
/ 10 марта 2020

У меня есть 3D-матрица, или, вернее, массив 2D-матрицы, и я хотел бы изменить порядок самого глубокого набора данных.

Итак, у меня есть:

array([[[ 1      ,  2      ,  3      , ...,
          7      ,  8      ,  9      ],
        ...,
        [ 10      ,  11      ,  12      , ...,
          16      ,  17      ,  18      ]],

       [[ 19      ,  20      ,  21      , ...,
          25      ,  26      ,  27      ],
        ...,
        [ 28      ,  29      ,  30      , ...,
          34      ,  35      ,  36      ]]])

Я бы хотел, чтобы это было

array([[[ 9      ,  8      ,  7      , ...,
          3      ,  2      ,  1      ],
        ...,
        [ 18      ,  17      ,  16      , ...,
          12      ,  11      ,  10      ]],

       [[ 27      ,  26      ,  25      , ...,
          21      ,  20      ,  19      ],
        ...,
        [ 36      ,  35      ,  34      , ...,
          30      ,  29      ,  28      ]]])

В настоящее время я достигаю этого результата, используя следующее:

reordered_list = []
for i in range(ts):
    inner_list = []
    for j in range(M_y):
        inner_list.append(original_array[i][j][::-1])
    reordered_list.append(inner_list)

reordered_array = np.array(reordered_list)

, но мне было интересно, есть ли более эффективный маршрут для подражания.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

вы можете использовать:

a = np.array([[[ 1      ,  2      ,  3,   
                  7      ,  8      ,  9      ],

                [ 10      ,  11      ,  12      , 
                  16      ,  17      ,  18      ]],

               [[ 19      ,  20      ,  21      ,
                  25      ,  26      ,  27      ],

                [ 28      ,  29      ,  30      , 
                  34      ,  35      ,  36      ]]])
a[:,:,::-1]

вывод:

array([[[ 9,  8,  7,  3,  2,  1],
    [18, 17, 16, 12, 11, 10]],

   [[27, 26, 25, 21, 20, 19],
    [36, 35, 34, 30, 29, 28]]]) 
1 голос
/ 10 марта 2020

Вы можете использовать numpy .flip () с соответствующей осью (2 здесь)

    y = np.flip(x, axis=2)
...