2013-04-03 9 views
11

Ho una matrice NumPy, per esempiocome fare spostamento circolare NumPy

a = np.arange(10) 

come posso muovere i primi n elementi alla fine dell'array?

Ho trovato questa funzione roll ma sembra che faccia solo il contrario, che sposta gli ultimi elementi n all'inizio.

+2

Non è "rollare" esattamente quello che vuoi? Invece di spostare i primi elementi 'n' alla fine, sposta gli ultimi elementi' len (a) -n' all'inizio? –

+0

Pubblica alcuni dati di ciò che desideri rispetto a ciò che stai cercando. – BlackVegetable

risposta

30

Perché non solo roll con un numero negativo?

>>> import numpy as np 
>>> a = np.arange(10) 
>>> np.roll(a,2) 
array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7]) 
>>> np.roll(a,-2) 
array([2, 3, 4, 5, 6, 7, 8, 9, 0, 1]) 
6

è possibile usare lo spostamento negativo

a = np.arange(10) 
print(np.roll(a, 3)) 
print(np.roll(a, -3)) 

rendimenti

[7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
[ 3, 4, 5, 6, 7, 8, 9, 0, 1, 2]

+0

un minuto in ritardo :) – entropiece

+0

anche inferiore a quello :( –

+0

Puoi dirmi, perché circshift (eye (m), 2) e numpy.roll (numpy.eye (m), -2)) danno risultati diversi? – user3515225