У меня есть вопрос, который беспокоит меня в течение нескольких дней. Давайте предположим, что мы определяем 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
.