これ は Python の隠し機能 で取り上げられましたが、この機能がどのように機能するかを説明する適切なドキュメントや例が見つかりません。
4 に答える
省略記号は、高次元のデータ構造をスライスするために numpy で使用されます。
この時点で、:
多次元スライスをすべての次元に拡張するために、できるだけ多くのフル スライス ( ) を挿入することを意味するように設計されています。
例:
>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
これで、オーダー 2x2x2x2 の 4 次元行列ができました。4 次元の最初の要素をすべて選択するには、省略記号表記を使用できます。
>>> a[..., 0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
これはと同等です
>>> a[:,:,:,0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
独自の実装では、上記のコントラクトを無視して、適切と思われるものに自由に使用できます。
Ellipsis
、または...
隠し機能ではなく、単なる定数です。たとえば、言語構文の一部である JavaScript ES6 とはまったく異なります。組み込みクラスや Python 言語構成体はそれを利用しません。
したがって、その構文は、それを理解するためのコードを記述したあなたまたは他の誰かに完全に依存します。
ドキュメントに記載されているように、Numpy はそれを使用します。ここにいくつかの例があります。
独自のクラスでは、次のように使用します。
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
もちろん、python のドキュメントや言語リファレンスもあります。しかし、それらはあまり役に立ちません。
これはEllipsisの別の使用法であり、スライスとは関係ありません。「完了」を示すマークとして、キューとのスレッド内通信でよく使用します。そこにあり、オブジェクトであり、シングルトンであり、その名前は「不足」を意味し、使いすぎではありません(通常のデータフローの一部としてキューに入れることができます)。YMMV。