В вашем вопросе есть некоторая неопределенность, но я думаю, что вы хотите выполнить расширенную индексацию следующим образом:
In [2]: arr = np.arange(24).reshape(4,3,2)
In [3]: levels = np.random.randint(0,4,(3,2))
In [4]: levels
Out[4]:
array([[1, 2],
[3, 1],
[0, 2]])
In [5]: arr
Out[5]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
In [6]: arr[levels, np.arange(3)[:,None], np.arange(2)]
Out[6]:
array([[ 6, 13],
[20, 9],
[ 4, 17]])
levels
is (3,2).Я создал 2 других индексных массива, чтобы они передавали с ним (3,1) и (2,).Результатом является (3,2) массив значений из arr
, выбранных их объединенными индексами.