В numpy
, если вы используете более одного причудливого индекса (т. Е. array
) для одновременного индексирования разных измерений одного и того же массива, они должны транслироваться. Это разработано так, что индексирование может быть более мощным. Для вашей ситуации самый простой способ решить проблему - выполнить индексацию дважды:
B[:, :, [0,2]] [..., [1,3,5]]
, где ...
обозначает максимально возможное количество :
.
Двойное индексирование таким образом приведет к дополнительному времени перемещения данных. Если вы хотите индексировать только один раз, убедитесь, что они транслируются (т.е. помещают причудливые индексы в другое измерение):
B[:, :, np.array([0,2])[:,None], [1,3,5]]
, что приведет к массиву X by Y by 2 by 3
. С другой стороны, вы также можете сделать
B[:, :, [0,2], np.array([1,3,5])[:,None]]
, что приведет к массиву X by Y by 3 by 2
. Ось [1,3,5]
перемещается перед осью [0,2]
.
Вам не нужно использовать np.array([0,2])
, если вам не нужно делать необычные операции с ним. Просто [0,2]
отлично.
np.array([0,2])[:,None]
эквивалентно [[0],[2]]
, где точка [:,None]
состоит в том, чтобы создать дополнительное измерение таким образом, чтобы форма стала (2,1)
. Формы (2,)
и (3,)
не могут транслироваться, а фигуры (2,1)
и (3,)
могут стать (2,3)
.