2013-04-01 9 views
6

Numpy tentative tutorialは、a[ : :-1]が逆aであることを示唆しています。誰かが私たちにどのようにそこに着いたのか説明できますかnumpyの逆配列ですか?

a[:]は、aの各要素(軸= 0)の意味を理解しています。次の:は、私の理解からスキップする要素の数(またはピリオド)を示す必要があります。

+5

がhttp://stackoverflow.com/questions/509211/the-python-slice-notationを見ますパーティーパッケージ。 – mgilson

+2

また、numpyの基本スライスが元の配列のコピーではなくビューを返す方法の良い説明については、http://stackoverflow.com/a/4371049/875127を参照してください。 –

答えて

4

他にも触れたように、これはPythonのスライス技術であり、numpyはちょうどスーツに従います。うまくいけば、これはどのように動作するかを説明するのに役立ちます。

最後のビットはステップサイズです。 1は、一度に1つの要素ずつステップすることを示し、-はそれを逆にします。あなたが負のステップサイズを持っていない限り、

ブランクは、彼らが最後と最初に示し、その場合には、最初と最後を示す:

In [1]: import numpy as np 

In [2]: a = np.arange(5) 

In [3]: a 
Out[3]: array([0, 1, 2, 3, 4]) 

In [4]: a[0:5:1] 
Out[4]: array([0, 1, 2, 3, 4]) 

In [5]: a[0:5:-1] 
Out[5]: array([], dtype=int64) 

In [6]: a[5:0:-1] 
Out[6]: array([4, 3, 2, 1]) 

In [7]: a[::-2] 
Out[7]: array([4, 2, 0]) 

それは0目から逆方向にステップしようとしたため、5行目は空の配列を与えます要素を5 thに設定します。
スライスに最後の要素という名前の「エンドポイント」が含まれていないため、行6は後方に移動するときに0を逃します。

3

これはnumpyに固有のものではなく、a[::-1]slice(None, None, -1)に相当します。最初の引数は開始インデックスで、2番目の引数は終了インデックスで、3番目の引数はステップです。開始または終了のためのNoneは、シーケンスの先頭または末尾を使用する場合と同じ動作を行い、ステップの場合は-1が逆の順序でシーケンスを反復処理します。

10

これはnumpyではありません。Pythonです。 Pythonで

、次の構文で来て反復可能なシーケンス/のためのスライス、

seq[start:stop:step] => a slice from start to stop, stepping step each time. 

があるすべての引数はオプションですが、:はPythonは、スライスとしてこれを認識するためにそこにする必要があります。ステップのための

負の値は、また、逆の順序で反復可能な同じシーケンス/のコピーを作成するために働く:

>>> L = range(10) 
>>> L[::-1] 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

そしてnumpyのは、何か良いサードパーティのライブラリのようなその「ルール」に続く..

これは、適切なPython用ですが、numpyのが良い第三のような規則のすべてに従い -
>>> a = numpy.array(range(10)) 
>>> a[::-1] 
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) 

this link