2013-04-01 181 views
6

Numpy tentative tutorial暗示a[ : :-1]是反轉的a。有人能向我解釋我們是如何到達那裏的?numpy中的反轉數組?

我知道a[:]意味着每個元素的a(軸= 0)。下一個:應表示根據我的理解跳過(或週期)的元素數。

+5

見http://stackoverflow.com/questions/509211/the-python-slice-notation - 這是蟒蛇正確,但numpy的服從所有的約定是個不錯的第3第三方包。 – mgilson

+2

另請參閱http://stackoverflow.com/a/4371049/875127,瞭解numpy中的基本切片如何返回視圖而不是原始數組的副本。 –

回答

4

正如其他人已經指出的那樣,這是一種蟒蛇切片技術,而numpy就是如此。希望這有助於解釋它是如何工作的:

最後一位是stepize。 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),其中第一個參數是開始索引,第二個參數是結束索引,第三個參數是步驟。 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的遵循「規則」像任何好的第三方庫..

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

this link