スタート:
In [326]: x=np.arange(10)
これら2式は同じことを行う - 配列から3つの要素を選択します。また、コピーを返すことを確認することもできます。ここでは、x[1:4]
はビューを返します。
In [327]: x[(1,2,3),]
Out[327]: array([1, 2, 3])
In [328]: x[[1,2,3]]
Out[328]: array([1, 2, 3])
しかし、コマンドなしで、タプルがエラーを発生させます:として
In [329]: x[(1,2,3)]
...
IndexError: too many indices for array
は同じ:
In [330]: x[1,2,3]
IndexError: too many indices for array
x[1,2,3]
を呼び出しx.__getitem__((1,2,3))
にPythonインタプリタによって変換されます。つまり、入力値はタプルとしてメソッドに渡されます。 x[(1,2,3)]
の余分な()
は違いはありません。しかし、最初の式にカンマはネストのレイヤを追加します。
In [338]: ((1,2,3))
Out[338]: (1, 2, 3)
In [339]: ((1,2,3),)
Out[339]: ((1, 2, 3),)
x[[1,2,slice(None)]]
はx[1,2,:]
と同等ですが、私はこれを確認するために、3Dの配列を作成する必要があります。
In [344]: X=np.arange(64).reshape(4,4,4)
単一要素の3Dインデキシング:最後の次元にスライスに
In [345]: X[(1,2,3)]
Out[345]: 27
In [346]: X[1,2,3]
Out[346]: 27
が3D:
In [347]: X[1,2,:]
Out[347]: array([24, 25, 26, 27])
インタプリタのみ正方形割り出し括弧内:
表記を受け入れ:
を
In [348]: X[(1,2,:)]
...
SyntaxError: invalid syntax
しかしslice
で、我々は、タプルやリスト
In [349]: X[(1,2,slice(None))]
Out[349]: array([24, 25, 26, 27])
In [350]: X[[1,2,slice(None)]]
Out[350]: array([24, 25, 26, 27])
としてタプルが、それは(1,2,3)
でやったのと同じ理由で、ここで働くことを書くことができます。私はそれが意味を成す唯一のものであるため、同じ方法で[]
のケースを扱っていると思います。スライスと数字を組み合わせて高度なインデックスを作成することは理にかなっていません。
私は2つの項目に加えて、スライスを選ぶことができますインデックスのトリックがあります:
In [354]: x[np.r_[1,3, 6:10]]
Out[354]: array([1, 3, 6, 7, 8, 9])
が、それは実際の範囲に
In [353]: np.r_[1,3, 6:10]
Out[353]: array([1, 3, 6, 7, 8, 9])
をスライスを拡大しています