Существует два типа индексации в NumPy basic и advanced .Базовое индексирование использует кортежи срезов для индексации и не копирует массив, а скорее создает представление с откорректированным strides
.В отличие от расширенного индексирования также используются списки или массивы индексов и копируется массив.
Ваша первая попытка
B = A[[0, 2], [0, 1], [1, 2]]
использует расширенное индексирование.При расширенном индексировании все списки индексов сначала транслируются в одну и ту же форму, и эта форма используется для выходного массива.В этом случае они уже имеют одинаковой формы, поэтому трансляция ничего не делает.Выходной массив также будет иметь эту форму двух записей.Первая запись выходного массива получается с использованием всех первых индексов трех списков, а вторая - с использованием всех вторых индексов:
B = numpy.array([A[0, 0, 1], A[2, 1, 2]])
Ваш второй подход
B = A[[0,2],:,:][:,:,[1,2]]
делаетработать, но это неэффективно.Он использует расширенную индексацию дважды, поэтому ваши данные будут скопированы дважды.
Чтобы получить то, что вы действительно хотите с расширенной индексацией, вы можете использовать
A[np.ix_([0,2],[0,1],[1,2])]
, как указано nikow.Это скопирует данные только один раз.
В вашем примере вы можете уйти, вообще не копируя данные, используя только базовую индексацию:
B = A[::2, :, 1:2]