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個に限らず)を...で置き換えられるのである。