Индексирование 2d массива с 2d массивом в Numpy - PullRequest
1 голос
/ 16 апреля 2020

У меня есть вопрос, который беспокоит меня в течение нескольких дней. Давайте предположим, что мы определяем 2d массив в Numpy:

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

Мы также определяем 1d массив для индексации, скажем:

ind = np.array([2,1])

Если мы попробуем x[ind] мы получим:

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

, что имеет большой смысл: строка № 2 и номер строки 1 из x.

Если мы запустим: x[:,ind] мы получим:

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

Опять же, это имеет большой смысл - мы получаем столбец номер 2, за которым следует номер столбца 1

Теперь мы определим индексный массив как 2d:

ind = np.array([[2,1],
                [2,2]])

Если мы запустим x[ind], мы получим:

array([[[6, 7, 8],
        [3, 4, 5]],

       [[6, 7, 8],
        [6, 7, 8]]])

Опять же, это имеет смысл - для каждой строки в двумерном массиве индексации мы получаем двумерный массив, который представляет соответствующие строки из исходного 2d массива x.

Однако, если мы запустим x[:,ind], мы получим следующий массив:

array([[[2, 1],
        [2, 2]],

       [[5, 4],
        [5, 5]],

       [[8, 7],
        [8, 8]]])

Я не понимаю этот вывод, так как он возвращает специфику c элемент в проиндексированных строках, но не в полных строках. Я бы предположил, что так же, как и в случае x[:,ind], когда это был 1d массив, мы получим 2d массивы, которые содержат исходные столбцы из исходного массива x.

1 Ответ

1 голос
/ 16 апреля 2020

В последнем случае с индексным массивом:

print(ind)
array([[2, 1],
       [2, 2]])

Поскольку ind - это массив 2D формы (2,2), и вы берете полный срез вдоль первой оси с помощью ind вы будете индексировать по столбцам A в каждой из его строк. Так, например, индексируя вторую строку [3, 4, 5] с помощью ind, вы получите элементы с индексами 2->5, 1->4, 2->5 и 2->5 снова, с результирующей формой, такой же, как ind, т. Е. [[5,4][5,5]].

То же самое для каждой строки, в результате чего получается массив (3,2,2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...