2017-03-25 5 views
0

私はnumpyののスライスとインデックス作成のいくつかは3次元スライスとインデックス作成と省略記号はどのように機能しますか?

最初のものは、次のされてどのように機能するかを理解するに苦労しています:

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

documentation

による場合選択タプル内のオブジェクトの数がNより小さい場合、後続の次元では :とみなされます。

つまり、[[1], [2], [3]] , [[4], [5], [6]]は2x3アレイそのものですか?

そして、どのように

x[1:2] 

リターン

array([[[4], 
     [5], 
     [6]]]) 

していますか?

第省略記号

>>> x[...,0] 
array([[1, 2, 3], 
     [4, 5, 6]]) 

省略記号は、数に展開される:x.ndimと同じ長さの選択 タプルを作るために必要なオブジェクト。単一の 省略記号が存在することがあります。

[...,0]はどういう意味ですか?

答えて

1

最初の質問では、形状(2、3、1)のxには2つのスライスの3x1アレイがあることを意味します。今

In [40]: x 
Out[40]: 
array([[[1], 
     [2],   # <= slice 1 of shape 3x1 
     [3]], 

     [[4], 
     [5],   # <= slice 2 of shape 3x1 
     [6]]]) 

、すなわち、(半開区間のようなものをあなたはx[1:2]を実行すると、それだけで最初のスライスの上にあなたの手が、Pythonの& numpyの中でそれは常に包括的かつ独占的な権利残っているので、第二のスライスを含めません[ 1,2))

In [42]: x[1:2] 
Out[42]: 
array([[[4], 
     [5], 
     [6]]]) 

これは、最初のスライスを取得する理由です。あなたの2番目の質問については

In [45]: x.ndim 
Out[45]: 3 

あなたは省略記号を使用するときに、それだけで3

In [47]: x[...,0] 
Out[47]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 

サイズにあなたの配列を広がっ上記のコードは意味、あなたは両方からスライスを取ります配列xとそれを行方向に伸ばします。

しかし、あなたはここで

In [49]: x[0, ..., 0] 
Out[49]: array([1, 2, 3]) 

をすれば代わりに、あなただけのxから最初のスライスを取り、それが行方向ストレッチ。

+1

説明をいただきありがとうございます – Imperator123

関連する問題