2015-11-19 2 views
1

у меня есть нп массив массивов массивов:Numpy получить значение в массиве массивов массивов для массива индексов

arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
arr2 = np.array([[10,20,30],[40,50,60],[70,80,90]]) 
arr3 = np.array([[15,25,35],[45,55,65],[75,85,95]]) 

list_arr = np.array([arr1,arr2,arr3]) 

и индексы массив:

indices_array = np.array([1,0,2]) 

Я хочу, чтобы получить массив по индексу 1 для первого (массив массивов), в массиве индекса 0 для второго (массив массивов) и массива с индексом 2 для третьего (массив массивов)

ожидается выход:

#[[ 4 5 6] 
#[10 20 30] 
#[75 85 95]] 

Я ищу Numpy способ сделать это. Поскольку у меня есть большие массивы, я предпочитаю не использовать списки понимания.

ответ

3

В принципе, вы выбираете элементы второй оси с indices_array, соответствующими каждому положению вдоль первой оси для всех элементов вдоль третьей оси. Таким образом, вы можете сделать -

list_arr[np.arange(list_arr.shape[0]),indices_array,:] 

Пример запуска -

In [16]: list_arr 
Out[16]: 
array([[[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9]], 

     [[10, 20, 30], 
     [40, 50, 60], 
     [70, 80, 90]], 

     [[15, 25, 35], 
     [45, 55, 65], 
     [75, 85, 95]]]) 

In [17]: indices_array 
Out[17]: array([1, 0, 2]) 

In [18]: list_arr[np.arange(list_arr.shape[0]),indices_array,:] 
Out[18]: 
array([[ 4, 5, 6], 
     [10, 20, 30], 
     [75, 85, 95]]) 
0

Просто Acces, связывая postions с требуемыми показателями (0-1, 1-0, 2-2) следующим образом:

desired_array = np.array([list_arrr[x][y] for x,y in enumerate([1,0,2])]) 
Смежные вопросы