2017-01-29 2 views
0

Предположим, у меня есть массивКак использовать 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 выглядит в этом случае подходящим, но как их использовать?

+0

Предполагается, что это 3D-массив? Ваш синтаксис неверен. – user2357112

+0

Да, это так. Плохо, я его отредактировал. – user3697665

ответ

2

Индекс массива для выбора суб-массива, используя:

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

Это выбирает последний элемент вдоль 3-го измерения 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]]]) 
+0

Спасибо большое! Не могли бы вы объяснить немного больше о [:, :: - 1] части в [:,:, - 1] [:, :: - 1]? Я пытаюсь выяснить, как этот код может изменить порядок. – user3697665

+0

Несомненно, я обновлю дополнительную информацию. – James

+1

RHS может быть записан как 'a [:, :: - 1, -1]', выбирая последний столбец и одновременно меняя строки. – hpaulj

Смежные вопросы