Использование advanced-indexing
-
a[b,np.arange(x)[:,None,None],np.arange(y)[:,None],np.arange(z)]
Более короткий способ выразить это -
a[tuple([b] + np.ogrid[:x,:y,:z])]
Использование встроенной функции NumPy np.take_along_axis
для выполнения расширенной индексации, выполняя грязную работу под капотами -
np.take_along_axis(a,b[None,...,None],axis=0)[0]