Другая форма для индексации в Python
Я слежу за курсом машинного обучения, и в обзоре библиотеки numpy используется метод индексации, который я никогда раньше не видел. Мы определились a = np.array([[1,2],[3,4],[5,6]]). Два новых массивов впоследствии создано: np.array([a[0,0], a[1,1], a[2,1]]. Я знаю такой способ индексации. Способ индексации , что я не знаю , это: print(a[[0,1,2],[0,1,1]]). Может ли кто-нибудь помочь мне с объяснением этой последней формы индексации?
Ответы
Когда nпередаются массивы, где n- количество измерений массива, они используются как индексы для соответствующих измерений. a[[0,1,2],[0,1,1]]эквивалентно[a[0,0], a[1,1], a[2,1]]
Процитирую Numpy документы:
... Из каждой строки следует выбрать определенный элемент. Индекс строки равен [0, 1, 2], а индекс столбца указывает элемент, который следует выбрать для соответствующей строки, здесь [0, 1, 0]. Используя оба вместе, задачу можно решить с помощью расширенной индексации:
x = np.array([[1, 2], [3, 4], [5, 6]])
x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])
Он вызывает индексацию целочисленного массива . В вашем примере вы обращаетесь к [[0,1,2],[0,1,1]]индексам массива 1x3 с именем a. Значит, вы получаете от a:
[
the first element of the first array,contained in this 1x3 array,
the second element of the second array, contained in this big array,
the second element of the third array, contained in the same array
]
Печать, вы получите выход [1 4 6], потому что те элементы в указанных позициях ( (0,0), (1,1), (2,1)). Вы можете визуализировать это как схему столбцов и строк :
[[rows],[colums]] # vertically speaking
Вы выбираете строки элементов, которые хотите в первом подмассиве , и столбцы во втором.