Ellipsisを知った。

Ellipsis(...)とは高次元配列のスライスで使われる特殊な値である。numpyでよく使われるようだ。

公式ドキュメントでは

拡張スライス文と同時に用いられる特殊な値です。

と書かれているが、ちょっと不親切だと思う。

Python2ではEllipsisでEllipsisを返す。

>>>Ellipsis
Ellipsis

Python3では、それに加え...でEllipsisを返すようになっている。

>>>...
Ellipsis

これだけではどう使うのか分からないので使用例を挙げる。

>>>from numpy import arange
>>>a = arange(16) #要素が0から15の配列を生成
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

>>>a = a.reshape(2,2,2,2) #2*2*2*2の4次元配列に変形
array([[[[ 0,  1],
         [ 2,  3]],

        [[ 4,  5],
         [ 6,  7]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])

>>>a[0:, 0:, 0:] #全要素。a[:, :, :]と書ける。
array([0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

>>>a[...] #上に同じ。Ellipsisで書き換えた。
array([0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

>>> a[:, :, :, 0].flatten() #各配列の1つ目を取り出している
array([ 0,  2,  4,  6,  8, 10, 12, 14])
 
>>>a[..., 0].flatten() #上に同じ。
array([ 0,  2,  4,  6,  8, 10, 12, 14])

...は2次元以上の配列をスライスする際に出るたくさんの:(3個に限らず)を...で置き換えられるのである。



参考資料
How do you use the ellipsis slicing syntax in Python?