名前空間をぼんやりと眺めていたところ、 という奇妙なオブジェクトに気づきました。Ellipsis
これは、特別なものではなく、特別なことをするわけでもありませんが、グローバルに利用可能な組み込みオブジェクトです。
検索してみると、Numpy と Scipy のスライス構文のあまり知られていないバリエーションで使用されていることがわかりましたが、他にはほとんど使用されていません。
このオブジェクトは、Numpy + Scipy をサポートするために特別に言語に追加されたのでしょうか? 省略記号には一般的な意味や用途があるのでしょうか?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis
ベストアンサー1
省略記号スライス表記で使用できるオブジェクトです。例:
myList[1:2, ..., 0]
__getitem__
その解釈は関数を実装し、そこにオブジェクトを見るもの次第ですEllipsis
が、主な(そして意図された)用途はナンピーサードパーティのライブラリで、多次元配列型を追加します。次元が複数あるため、スライスは開始インデックスと終了インデックスだけよりも複雑になります。複数の次元でスライスできると便利です。たとえば、4 × 4 配列の場合、左上の領域はスライスによって定義されます[: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
編集: 省略記号は標準ライブラリtyping
モジュールでも使用されます。たとえば、シグネチャを指定せずにCallable[..., int]
を返す呼び出し可能オブジェクトを示す場合int
や、tuple[str, ...]
可変長の同種の文字列タプルを示す場合などです。