матрица срезов по различным индексам - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть массив ex 5 * 3, например

[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
[13,14,15]

, и у меня есть 3 списка для их выбора, например

a1 = [0,1,2]
a2 = [0,1,3]
a3 = [0,2,4]

Теперь я хочу получить 3 массива,каждый приходит от a для a1, a2 & a3 , a1 выбирает только 1-й столбец, a2 выбирает только 2-й столбец ... для данного примера, я хочу

[1,4,7], [2,5,11], [9,12,15]

Что лучшеспособ сделать это?

Спасибо.

1 Ответ

1 голос
/ 02 апреля 2019
In [913]: arr = np.arange(1,16).reshape(5,3)                                    
In [914]: arr                                                                   
Out[914]: 
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12],
       [13, 14, 15]])
In [915]: idx = np.array([[0,1,2],[0,1,3],[0,2,4]])                             
In [916]: idx.shape                                                             
Out[916]: (3, 3)

Мы хотим выбрать (3,3) массив значений, где idx идентифицирует строки.Поэтому нам нужен индекс столбца, который транслируется вместе с ним[0,1,2] будет делать.

In [917]: arr[idx, np.arange(3)]                                                
Out[917]: 
array([[ 1,  5,  9],
       [ 1,  5, 12],
       [ 1,  8, 15]])

Упс, неправильный выбор;давайте попробуем транспонировать:

In [918]: arr[idx.T, np.arange(3)]                                              
Out[918]: 
array([[ 1,  2,  3],
       [ 4,  5,  9],
       [ 7, 11, 15]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...