Эффективное индексирование матрицы по столбцам в numpy - PullRequest
3 голосов
/ 12 апреля 2020

У меня есть две матрицы одинакового размера, A, B. Я хочу использовать столбцы B, чтобы получить доступ к столбцам A для каждого столбца. Например,

A = np.array([[1, 4, 7],
              [2, 5, 8],
              [3, 6, 9]])

и

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

Я хочу что-то вроде:

A[B] = [[1, 4, 9],  
        [2, 6, 8], 
        [3, 5, 7]]

Т.е. я использовал j-й столбец B как указатели к j-й колонке А. Есть ли эффективный способ сделать это? Спасибо!

1 Ответ

3 голосов
/ 12 апреля 2020

Вы можете использовать расширенное индексирование :

A[B, np.arange(A.shape[0])]

array([[1, 4, 9],
       [2, 6, 8],
       [3, 5, 7]])

Или с np.take_along_axis:

np.take_along_axis(A, B, axis=0)

array([[1, 4, 9],
       [2, 6, 8],
       [3, 5, 7]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...