2011-12-15 3 views
0

그래서 배열의 순환 순열을 수행 할 수있는 조각이있는 몇 가지 속임수가 있는지 궁금합니다. 기본적으로 나는 정수가 있는지 알고 싶은 i,j,k 있도록 :numpy 슬라이스를 사용하여 순환 순열을 수행하는 방법이 있습니까?

> x = np.arange(10) 
> print x[i:j:k] 
     [9,0,1,2,3,4,5,6,7,8] 

> x = np.arange(10) 
> print x[i:j:k] 
     [1,2,3,4,5,6,7,8,9,0] 

나는 자연의 구문이 될 것이라고 생각 :

import numpy as np 

x = np.arange(10) 
print x[-1:0] 

하지만 빈을 반환 배열 (그리고 그것은 다소 이해된다 ...). 또한 조각의 다른 조합을 시도하고 아무것도 효과가 없습니다. 나는 다른 방법으로 그것을 할 수 있지만, 이것은 매우 깔끔하고 짧을 것입니다. : P

고마워요.

+1

이해가 안됩니다. 'x [i : j : k] == x [i : j : k]'이다. –

+0

그는 양방향으로 numpy.roll에서 수행하는 작업을 수행하기 위해 분할 방법을 찾고 있습니다. – Benjamin

+0

미안 @SteveTjoa 나는 두 개의 다른 순열을 수행 할 i, j 및 k의 두 가지 세트를 의미했습니다. 나는 단지 경제를 위해서 같은 글자를 사용했다. –

답변

3

당신은 numpy.roll() 또는 몇 가지 큰 트릭을 사용할 수 있습니다.하지만 그 외에는 대답이 '아니오'라고 대답하는 것 외에 3 개의 정수 슬라이스가 필요로하는 것을 반환합니다.

+0

'numpy.roll'은 새로운 배열을 만듭니다. 나는 OP가 O (1) 시간 복잡성 해결책을 원한다고 생각한다. – cyborg

2

당신이 원하는 것을하기 때문에 불가능하다고 생각합니다. numpy는 배열의 복사본을 만들고 슬라이스로 복사본이 아닌 뷰를 생성해야합니다. Benjamin이 이미 언급했듯이 numpy.roll을 확인하십시오.

관련 문제