2016-02-10 7 views
3

При использовании ellipsis (...) для индексации 1-мерного ndarray я бы ожидал, что выражения X[0] и X[..., 0] будут семантически идентичными. Однако их строковые представления отличаются:Для 1-D `X`, в чем разница между` X [n] `и` X [..., n] `?

In [522]: X = arange(5) 

In [523]: repr(X[0])       
Out[523]: '0' 

In [524]: repr(X[..., 0]) 
Out[524]: 'array(0)' 

я не могу найти какие-либо другие различия, и в самом деле, они равны в соответствии с array_equal:

In [526]: array_equal(X[0], X[..., 0]) 
Out[526]: True 

Если они равны согласно array_equal, почему у них разные представления строк?

+1

Как говорит @CharlieHaley, различные представления строк связаны с тем, что один из них дает вам скаляр, а другой - 0-мерный массив NumPy. Я понятия не имею, почему '...' приводит к массиву 0-d. –

ответ

4

X[0] возвращает numpy.int64 объект.
Когда вы говорите X[0], вы сообщаете python, чтобы дать вам объект с индексом 0 в массиве X.

X[...,0] возвращает 0 мерный массив numpy.
Когда вы говорите X[...,0], вы сообщаете python, чтобы дать вам элементы с индексом 0 вдоль последней оси массива X.

+2

Хм. На самом деле это не значит '...'. В 'X [..., 0]' вы указываете, что вас интересует только индекс '0' для * последней оси X, но для всех предыдущих осей вы принимаете полный диапазон индексов. Если вы попробуете это на 2d-массиве, вы увидите, что 'X [..., 0]' дает вам 1-й результат. –

+0

Да, я сформулировал это неправильно. В точку. –