У вас есть это заявление:
In [31]: x[0:-1]
Этот способ индексации означает, что «начинайте с 1-го ряда и продолжайте до последнего ряда (исключая)». Вот почему мы получаем первый ряд в результате.
Out[31]: array([[0, 1, 2, 3, 4]])
Но когда вы делаете:
In [31]: x[1:-1]
Out[31]: array([], shape=(0, 5), dtype=int64)
Он просит NumPy «начинать со второго ряда и не включать последний ряд». Поскольку здесь вторая строка также является последней строкой, она исключается, и в результате мы получаем пустой массив.
Дополнительная информация : Здесь нет ничего конкретного об использовании отрицательной индексации, такой как -1
. Например, следующие способы индексации также будут возвращать пустые массивы.
# asking to "start at first row and end at first row"
In [42]: x[0:0]
Out[42]: array([], shape=(0, 5), dtype=int64)
# asking to "start at second row and end at second row"
In [43]: x[1:1]
Out[43]: array([], shape=(0, 5), dtype=int64)
Когда дело доходит до индексации в Python / NumPy, это всегда " слева включительно и справа ".
Вот что-то в простом Python (то есть индексирование list
)
In [52]: lst = [1, 2]
In [53]: lst[1:-1]
Out[53]: [] # an empty list
Обратите внимание на конструкцию индексации: [start:stop:step]
Если мы начнем и остановим на одном и том же индексе, то мы ни к чему не приведем, и в результате будет возвращена пустая структура данных (массив / список / кортеж и т. Д.).