Почему индексирование пустых массивов скобками и запятыми отличается по поведению?

Я склонен индексировать массивы (матрицы) с помощью скобок, но я заметил, что когда я хочу нарезать массив (матрицу), я должен использовать запятую. Почему это? Например,

>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> x[1][1]
4                 # expected behavior
>>> x[1,1]
4                 # expected behavior
>>> x[:][1]
array([3, 4])     # huh?
>>> x[:,1]
array([2, 4, 6])  # expected behavior
 BoltzmannBrain01 июл. 2016 г., 02:44
Спасибо @hpaulj, это ответ, который я ищу.
 hpaulj30 июн. 2016 г., 07:05
Вы должны понять, чтоx[1] или жеx[:] делает до пониманияx[1][1] или жеx[:][1], Две скобки применяются последовательно, с 2__getitem__ звонки. Но вx[:,1] обе оси рассматриваются вместе - по одномуnumpy __getitem__ вызов.

Ответы на вопрос(2)

Решение Вопроса

Это:

x[:, 1]

значит "взять все показателиx вдоль первой оси, но только индекс 1 вдоль второй ".

Это:

x[:][1]

значит "взять все показателиx вдоль первой оси (так что всеx), затем возьмите индекс 1 вдольпервый ось результата ". Вы применяете1 на неправильную ось.

x[1][2] а такжеx[1, 2] эквивалентны только потому, что индексирование массива с целым числом сдвигает все оставшиеся оси в направлении передней части фигуры, поэтому первая осьx[1] вторая осьx, Это не обобщает вообще; Вы должны почти всегда использовать запятые вместо нескольких шагов индексации.

если указывается меньше индексов, чем количество осей, отсутствующие индексы считаются полными срезами. Следовательно, когда вы по существу делаете при звонкеx[:][1] являетсяx[:,:][1,:] Следовательно,x[:,:] просто вернет х сам.

Ваш ответ на вопрос