明らかに、[[1, 0]]
インデックスの解釈にはあいまいさがあります。おそらくここで議論されているのと同じこと:
numpy でタプルの代わりにリストが渡されたときの高度なスライス
別の配列を試して、物事が明確になるかどうかを確認します
In [312]: D2=np.array([[0,0],[1,1],[2,2]])
In [313]: D2
Out[313]:
array([[0, 0],
[1, 1],
[2, 2]])
In [316]: D2[[[1,0,0]]]
Out[316]:
array([[1, 1],
[0, 0],
[0, 0]])
In [317]: _.shape
Out[317]: (3, 2)
:
orを使用...
してインデックス リストを配列にし、すべて (1,3) インデックスとして扱い、それに応じて結果の次元を拡張します。
In [318]: D2[[[1,0,0]],:]
Out[318]:
array([[[1, 1],
[0, 0],
[0, 0]]])
In [319]: _.shape
Out[319]: (1, 3, 2)
In [320]: D2[np.array([[1,0,0]])]
Out[320]:
array([[[1, 1],
[0, 0],
[0, 0]]])
In [321]: _.shape
Out[321]: (1, 3, 2)
インデックス配列に転置を適用すると、(3,1,2) の結果が得られることに注意してください。
In [323]: D2[np.array([[1,0,0]]).T,:]
...
In [324]: _.shape
Out[324]: (3, 1, 2)
:
またはを使用しないと、1 番目の軸に適用する前に...
の 1 つのレイヤーが剥がれているように見えます。[]
In [330]: D2[[1,0,0]].shape
Out[330]: (3, 2)
In [331]: D2[[[1,0,0]]].shape
Out[331]: (3, 2)
In [333]: D2[[[[1,0,0]]]].shape
Out[333]: (1, 3, 2)
In [334]: D2[[[[[1,0,0]]]]].shape
Out[334]: (1, 1, 3, 2)
In [335]: D2[np.array([[[[1,0,0]]]])].shape
Out[335]: (1, 1, 1, 3, 2)
ここには下位互換性の問題があると思います。タプル層が「冗長」であることはわかっています:D2[(1,2)]
と同じD2[1,2]
です。numpy
ただし、 ( )の初期バージョンとの互換性のために、numeric
その最初の[]
レイヤーは同じ方法で処理される場合があります。
その 11 月の質問で、私は次のように指摘しました。
したがって、最上位レベルでは、リストとタプルは同じように扱われます (リストが高度なインデックス リストとして解釈できない場合)。
a の追加は、から...
を分離する別の方法です。D2[[[0,1]]]
D2[([0,1],)]
@eric/s
プルリクエストseburg
の説明から
タプルの正規化はかなり小さいものです (基本的に、長さ <= np.MAXDIMS の非配列シーケンスをチェックし、別のシーケンスが含まれている場合、スライスまたは None はそれをタプルと見なします)。
[[1,2]]
はリストを持つ 1 要素のリストなので、タプルと見なされ([1,2],)
ます。 [[1,2]],...
すでにタプルです。