2011-12-14 1 views
30

제 질문은 : numpy에서 반복되지 않는 난수를 어떻게 만들 수 있습니까?numpy에서 반복되지 않는 난수

list = np.random.random_integers(20,size=(10)) 
+0

"반복적이지 않은"이란 무엇을 의미합니까? 난수 시퀀스가 ​​반복되지 않는다는 것? 난수 생성기의 상태가 컴퓨터의 유한 메모리에 맞아야하기 때문에 이것은 불가능합니다. 아니면 하나의 숫자가 두 번 나타나지 않는다는 뜻입니까? –

+3

비 반복적이란 중복이없는 목록이 있음을 의미합니다. – Polynomial

+1

아마 무작위 순열이 필요합니까? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg

답변

40

당신이 NumPy와 사용에 대한 고집하지 않는 경우, 당신은 표준 라이브러리에서 random.sample()를 사용할 수 있습니다

a = numpy.arange(20) 
numpy.random.shuffle(a) 
print a[:10] 
+0

print random.sample (range (20), 10)은 python 2.6에서 작동하지 않습니까? – Academia

+1

@ user1038382 : 저를 위해 일하십시오. "효과가 없다"는 것은 무엇을 의미합니까? –

+0

이 오류 : "정의되지 않은 변수 : 임의" – Academia

-2

필요한 숫자 범위를 포함하는 배열을 생성 한 다음 배열의 0 번째 요소가있는 임의의 문자를 반복적으로 바꿔서 임의 순서대로 섞습니다. 이것은 중복 값을 포함하지 않는 무작위 순서를 생성합니다.

+1

결과 임의의 시퀀스의 또 다른 속성은 [특히 임의적이지는 않습니다]입니다 (http : //www.codinghorror .com/blog/2007/12/the-naivete.html의 위험). –

+0

@SvenMarnach - 대부분의 목적을 위해, 그러나, 그것은 충분히 랜덤합니다. 그는 무작위로 원한다면 이중 무작위 접근법을 사용할 수 있습니다. – Polynomial

+0

이것은 무의미합니다. OP는 라이브러리 호출을 사용하여 올바르게 수행 할 수 있습니다. 사용하기 쉽고, 실행 속도가 빠르고, 사용자 정의 버전보다 읽기 쉽습니다. 올바른 알고리즘을 사용할 때 아무런 불이익이 없을 때 잘못된 알고리즘을 사용해야하는 이유를 생각할 수 없습니다. –

43

I : NumPy와 함께

print random.sample(range(20), 10) 

, 당신은 numpy.random.shuffle()과 슬라이스를 사용해야합니다 지금 numpy.random.sample이 제대로 작동하지 않는다고 생각하십시오. 이것은 내 방식입니다.

import numpy as np 
np.random.choice(range(20), 10, replace=False) 
+10

'range (n)'(또는'arange (n)')를'choice'의 첫 번째 인수로 사용하는 대신'n'을 전달하는 것과 같습니다. '선택 (20, 10, replace = False)'. –