2013-04-01 23 views
6

Numpy tentative tutorial suggerisce che a[ : :-1] è un a invertito. Qualcuno può spiegarmi come siamo arrivati?Array invertito in numpy?

Capisco che a[:] significa per ogni elemento di a (con asse = 0). Il prossimo : dovrebbe indicare il numero di elementi da saltare (o punto) dalla mia comprensione.

+5

Vedi http://stackoverflow.com/questions/509211/the-python-slice-notation - Questo è per python corretta, ma NumPy obbedisce tutte le convenzioni come un buon 3 ° pacchetto di festa. – mgilson

+2

Vedere anche http://stackoverflow.com/a/4371049/875127 per una buona spiegazione di come l'affettamento di base in numpy restituisce una vista e non una copia dell'array originale. –

risposta

4

Come altri hanno notato, questa è una tecnica di pitone slicing, e numpy segue solo l'esempio. Speriamo che questo aiuti a spiegare come funziona:

L'ultimo bit è la procedura. Il 1 indica di passare da un elemento alla volta, lo - lo fa al contrario.

Blanks indicano il primo e l'ultimo, a meno che non si dispone di un passo di negativo, nel qual caso essi indicano cognome e:

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]) 

Linea 5 dà un array vuoto in quanto si cerca di fare un passo indietro dal 0 ° elemento al 5 th.
La sezione non include il 'endpoint' (denominato ultimo elemento) in modo che la riga 6 manchi 0 quando si va indietro.

3

Questo non è specifico per numpy, la sezione a[::-1] equivale a slice(None, None, -1), dove il primo argomento è l'indice iniziale, il secondo argomento è l'indice finale e il terzo argomento è il passo. None per l'avvio o l'arresto avrà lo stesso comportamento dell'inizio o della fine della sequenza e -1 per il passaggio itererà sulla sequenza in ordine inverso.

10

Non è numpy, è Python.

In Python, ci sono fette di sequenza/iterable, che vengono in seguente sintassi

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

Tutti gli argomenti sono facoltativi, ma un : deve essere lì per Python riconoscere questo come una fetta. valori

negativi, per il passo, anche lavorare per fare una copia della stessa sequenza/iterabile in ordine inverso:

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

E NumPy consegue che "regola" come ogni buona biblioteca 3rd party ..

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

Vedi this link