Python3の「…」(Ellipsisオブジェクト)

いわゆる,スプレッドオペレータというやつだろうか.

How to specify unknown number of preceding indices in python? – StackOverflow

回答のコードが分かり易い.

a = np.arange(24).reshape(2,2,2,3)
b = np.arange(24).reshape(2,4,3)
c = np.arange(24).reshape(8,3)

print((a[...,1,:] == a[:,:,1,:]).all())
# True

print((b[...,1,:] == b[:,1,:]).all())
# True

print((c[...,1,:] == c[1,:]).all())
# True

True
True
True

1つ目の「…」はshape(2,2,2,3)の最初の(2,2)を表し,
2つ目の「…」はshape(2,4,5)の最初の(2)を表し,
3つ目の「…」は何も無し.

Ellipsisオブジェクトを用いると,
最初の行をスキップして,任意のshapeで処理できる.

Ellipsisオブジェクトを覚えておけば後ろに合わせて次元を処理できる.

これは使いこなせればものすごく便利だなあ.
 
 
 
Indexing – Numpy v.1.13 Manual

x = np.array(
    [
        [[1],[2],[3]], 
        [[4],[5],[6]]
    ]
)

x[0]

array([[1],
[2],
[3]])

x[..., 0]

array([[1, 2, 3],
[4, 5, 6]])

x.shape

(2, 3, 1)

広告
カテゴリー: 未分類 パーマリンク

Python3の「…」(Ellipsisオブジェクト) への1件のフィードバック

  1. ピンバック: 距離行列(類似性行列) | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中