Путаница в индексах в массивах numpy

Меня действительно смущает индексная логика массивов numpy с несколькими измерениями. Вот пример:

import numpy as np
A = np.arange(18).reshape(3,2,3)
[[[ 0,  1,  2],
  [ 3,  4,  5]],

 [[ 6,  7,  8],
  [ 9, 10, 11]],

 [[12, 13, 14],
  [15, 16, 17]]])

это дает мне массив формы (3,2,3), назовите их (x, y, z) в качестве аргумента. Теперь мне нужен массив B с элементами из A, соответствующими x = 0,2, y = 0,1 и z = 1,2. Например,

array([[[ 1,  2],
        [4,  5]],

       [[13, 14],
        [16, 17]]])

Наивно я думал, что

B=A[[0,2],[0,1],[1,2]]

сработает. Но он дает

array([  2, 104]) 

и не работает.

A[[0,2],:,:][:,:,[1,2]]

выполняет свою работу. Но мне все еще интересно, что случилось с моей первой попыткой. И как лучше всего делать то, что я хочу?

15
задан jonalm 27 January 2011 в 10:41
поделиться