1. ホーム
  2. パイソン

[解決済み】Ellipsisオブジェクトは何をするのですか?

2022-03-23 14:42:16

質問

名前空間をぼんやり眺めていたら、「Security」という奇妙なオブジェクトがあることに気づきました。 Ellipsis これは特別なものでも何でもないように見えますが、グローバルに利用できるビルトインです。

検索してみると、NumpyとScipyのスライス構文の不明瞭なバリエーションで使われていることがわかりました...が、他にはほとんど何もありません。

このオブジェクトは、Numpy + Scipyをサポートするために特別に言語に追加されたのでしょうか?Ellipsisには一般的な意味や用途があるのでしょうか?

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

解決方法は?

このことは、別の 質問 最近 を詳しく説明すると、私の 回答 そこから

エリプシス は、スライス表記で出現することができるオブジェクトです。 例えば

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]])

これをさらに発展させたものとして、Ellipsisは、指定されていない配列の残りの次元のプレースホルダーを示すために使用されています。 これは、スライス全体を示すものと考えてください。 [:] のように、3次元配列の場合は、配置された隙間のすべての次元について a[...,0] と同じです。 a[:,:,0] で、4dの場合。 a[:,:,:,0] を、同様に a[0,...,0]a[0,:,:,0] (真ん中のコロンの数が配列の全次元数を構成する).

興味深いことに、python3では、Ellipsisリテラル( ... はスライス構文以外でも使えるので、実際に書くことができます。

>>> ...
Ellipsis

各種数値型以外は、いや、使われてないと思います。 私が知る限り、純粋にnumpyの使用のために追加されたもので、オブジェクトと対応する構文を提供する以外のコアサポートはありません。 オブジェクトは必要ありませんが、スライスのリテラル "... " のサポートは必要です。