Basic Slicing: -
Basic Slicing происходит при использовании объекта slice . Обычно объект слайса создается как array [(start:stop: step)]. Под этим также подразумеваются многоточие и ось.
Пример: - массив 1D
>>x=np.arange(10)
>>x[2:10:3]
array([2, 5, 8])
Пример: - 2Dмассив
>>>x = np.array([[1,2,3], [4,5,6]])
>>>x[1:2]
array([[4, 5, 6]])
Пример: - 3D-массив
>>>x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
>>> x[0:1]
array([[[1],
[2],
[3]]])
В приведенном примере количество заданных срезов (obj) меньше, чем уобщее количество измерений массива. Если число объектов в кортеже выбора меньше, чем N, то оно предполагается для любых последующих измерений.
Расширенное нарезание: -
Расширенное индексирование запускается, когда объект выделения obj ,
- является объектом последовательности, не состоящим из кортежей,
- ndarray (с типом данных integer или bool),
- кортеж по крайней мере с одним объектом последовательности или ndarray (с типом данных integer или bool).
Существует два типа расширенной индексации: Integer и Boolean.
Индексирование целых чисел: -
Индексирование целых массивов позволяет выбирать произвольные элементы в массиве на основе их N-мерного индекса.Каждый целочисленный массив представляет количество индексов в этом измерении.
Если индекс состоит из такого количества целочисленных массивов, сколько индексируемых массивов имеет измерения, индексация является прямой, , но отличается от нарезки .
Пример: -
>>a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>a[[0,1,2],[0,1,1]]
array([1, 5, 8])
Приведенный выше пример печатает: a [0,0],a [1,0], a [2,1]
Помните: - Итак, целочисленная индексация сопоставляет два индекса.
Теперь к вашему вопросу: -
>>>a=np.array([3,4,5])
>>>a[0,:,[0,1]]
Первый случай: -
Это имеет вид x[arr1,:,arr2].
arr1 и arr2 являютсярасширенные индексы. Мы также считаем, что 0 также является расширенным индексом.
Если расширенные индексы разделены срезом, многоточием или новой осью, то измерения, полученные в результате расширенной операции индексации, будут первыми в массиве результатов.и подпространственные измерения после этого.
Это по существу означает, что размерность [0,1] стоит первой в арлучей.Я опускаю 0 , поскольку он не имеет измерения.
>>>a[0,:,[0,1]].shape
(2,4)
Второй случай: -
Это имеет вид x[:,:,arr1].
Здесь только arr1 является расширенным индексом.
Если все расширенные индексы расположены рядом друг с другом, то измерения из расширенных операций индексации вставляются в массив результатов в одном местекак они были в исходном массиве.
По сути это означает, что размерность [0,1] находится в соответствующей позиции, указанной в индексе массива.
>>>a[0:1,:,[0,1]].shape
(1,4,2)
[0,1] имеет форму (2,) и, поскольку оно встречается в третьем индексе, оно вставляется в третий индекс массива результатов.
Любые предложения и улучшения приветствуются.
Ссылка: -
- Numpy_Docs