Первый взгляд на индексирование списка в списке длины 2:
>>> L = ['one', 'two']
>>> L[-1] # last element
'two'
>>> L[-2] # second-to-last element
'one'
>>> L[-3] # out of bounds - only two elements in this list
# IndexError: list index out of range
Аргумент axis
аналогичен, за исключением того, что он указывает размерность ndarray. Это будет легче увидеть, если использовать неквадратный массив:
>>> t = np.arange(1,11).reshape(2,5)
>>> t
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> t.ndim # two-dimensional array
2
>>> t.shape # a tuple of length t.ndim
(2, 5)
Итак, давайте рассмотрим различные способы вызова суммы:
>>> t.sum() # all elements
55
>>> t.sum(axis=0) # sum over 0th axis i.e. columns
array([ 7, 9, 11, 13, 15])
>>> t.sum(axis=1) # sum over 1st axis i.e. rows
array([15, 40])
>>> t.sum(axis=-2) # sum over -2th axis i.e. columns again (-2 % ndim == 0)
array([ 7, 9, 11, 13, 15])
Попытка t.sum(axis=-3)
будет ошибкой, потому что у вас есть только 2 измерения в этом массиве. Вы можете использовать его на трехмерном массиве.