これは最近別の質問で出てきました。そこから私の答えを詳しく説明します:
省略記号は、スライス表記で表示できるオブジェクトです。例えば:
myList[1:2, ..., 0]
__getitem__その解釈は、関数を実装し、Ellipsisそこにオブジェクトを表示するものに完全に依存しますが、その主な(そして意図された)用途は、多次元配列型を追加するnumpyサードパーティライブラリにあります。複数の次元があるため、スライスは単なる開始インデックスと停止インデックスよりも複雑になります。複数の次元でスライスできると便利です。たとえば、4x4配列の場合、左上の領域はスライスによって定義されます[:2,:2]。
>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
>>> a[:2,:2] # top left
array([[1, 2],
[5, 6]])
これをさらに拡張して、ここでは省略記号を使用して、指定されていない残りの配列次元のプレースホルダーを示します。[:]配置されたギャップ内のすべての次元の完全なスライスを示すと考えてください。したがって、3d配列の場合a[...,0]は、a[:,:,0]4dの場合a[:,:,:,0]と同じa[0,...,0]ですa[0,:,:,0](ただし、中央の多くのコロンが完全な数を構成します)。配列内の次元の)。
興味深いことに、python3では、省略記号リテラル(...)はスライス構文の外で使用できるため、実際には次のように記述できます。
>>> ...
Ellipsis
いろいろな数値タイプを除いて、いや、使われているとは思いません。私の知る限り、これは純粋にnumpyで使用するために追加されたものであり、オブジェクトと対応する構文を提供する以外のコアサポートはありません。そこにあるオブジェクトはこれを必要としませんでしたが、スライスの文字通りの「...」サポートは必要でした。