2013-04-03 25 views
11

mam numpy tablicę, na przykładjak zrobić okrągły przesunięcie numpy

a = np.arange(10) 

Jak mogę przesunąć pierwsze n elementy do końca tablicy?

Znalazłem tę funkcję roll, ale wygląda na to, że działa tylko odwrotnie, co przesuwa ostatnie elementy n na początek.

+2

Czy to nie 'roll' dokładnie to, co chcesz? Zamiast przesuwać pierwsze elementy "n" do końca, przenieś ostatnie elementy 'len (a) -n' na początek? –

+0

Publikuj dane dotyczące tego, co chcesz, a co znajdujesz. – BlackVegetable

Odpowiedz

30

Dlaczego nie tylko roll z liczbą ujemną?

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

można wykorzystywać negatywną zmianę

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

powraca

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

+0

jedna minuta późno :) – entropiece

+0

jeszcze mniej niż :( –

+0

Czy możesz mi powiedzieć, dlaczego circshift (oko (m), 2) i numpy.roll (numpy.eye (m), -2)) dają inny wynik? – user3515225