티스토리 뷰

Python

Python,module random [랜덤]

hwangyoungjae 2016. 5. 19. 13:01
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파이썬에서는 임의의 정수실수를 생성하거나시퀸스 객체중 임의의 값을 선택하는 등의 연산을 위하여 랜덤 모듈을 내장하고 있다임의의 숫자를 생성함에도 정규분포를 따르거나로그분포를 따르는 드으이 다양한 방법이 존재하지만일반적인 개발 작업에서는 이러한 부분이 자주 사용되지는 않는다.

>random.seed([x])

임의 숫자 생성기의 초기화작업을 한다.

만약 인자가 생략되거나 None인 경우현재시스템의 시간값을 사용함

 

>random.random()

'0.0 <= F < 1.0' 사이 임의의 float숫자를 반환

 

>random.uniform(a, b)

인자로 받은 두 값사이의 임의의 float숫자를 반환

 

>random.gauss(m, sb)

가우스 분포(정규분포)의 난수(Gaussian random number)를 반환

 

>random.randrange([start], stop[, stop])

내장 함수인 range()의 아이템 중에서 임의로 선택하여 반환

 

>random.randint(a, b)

'a <= N <= b'인 임의의 정수 N을 반환

 

>random.choice(seq)

입력받은 시퀸스 객체의 임의의 아이템을 반환

만약 입력받은 시퀸스가 빈 경우 IndexError를 발생

 

>random.shuffle(x[. random])

입력받은 시퀸스 객체를 섞는다.

선택적으로 사용되는 random 인자는 0.0 1.0사이의 임의의 값을 반환하는 함수어이야 한다.

특별히 정의되지 않는 경우 random()함수를 기본적으로 사용

 

>random.sample(population, k)

두번째 인자 K개만큼의 아이템을 첫번째 인자인 시퀸스객체로부터 중복없이 추출

원본에는 아무런 변경을 가하지 않음

 

>> 임의의 실수 생성 <<

아래는 0.0에서 1.0사이의 float값을 임의로 생성하는 예제이다.

>>> import random

>>> random.random() #함수를 호출할때마다 다른값이 반환됨

0.36897932504969255

>>> random.random()

0.041921545604631905

 

아래는 입력받은 두 값사이의 float값을 임의의로 생성하는 예제이다.

>>> random.uniform(3,4)

3.9768236419732053

>>> random.uniform(3,4)

3.3453398982589326

 

아래는 평균이 '1', 표준편차가 '1.0'인 정규분포의 난수를 생성하는 예제이다.

>>> for i in range(3):

             random.gauss(1,1.0)

 

3.506983971967604

1.2393369749368177

1.9814446819449203

 

>> 임의의 정수 생성 <<

아래의 예제는 0 ~ 20 사이의 수 중 임의의 정수를 생성하는 예제이다.

random.randrange()를 이용하는 경우생성되는 임의의 정수는 중복될수 있다.

>>> [random.randrange(20) for i in range(10)]

[15, 12, 14, 5, 7, 8, 1, 14, 16, 0]

 

0 ~ 20사이의 숫자중 중복을 허용하지 않고 임의의 정수를 생성하기 위해서는 random.sample()를 사용하면 된다.

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

[0, 13, 4, 7, 8, 11, 10, 17, 3, 12]

 

또한 아래는 0 ~ 20사이의 수 중 3의 배수만 출력하는 예제이다.

>>> [random.randrange(0, 20, 3) for i in range(5)] #중복을 허용

[3, 6, 18, 3, 15]

 

>> 시퀸스 객체관련 연산 <<

리스트튜플과 같은 시퀸스 객체에서 임의로 몇개의 아이템을 선택해야 하는 경우가 있다.

random.choice()를 이용하면 임의의 아이템을 중복하여 선택할수 있다.

>>> L = list(range(10))

>>> L

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

>>> [random.choice(L) for i in range(3)] #중복되어 선택 가능

[2, 7, 6]

 

만약 중복을 허용하지 않고 임의의 아이템을 선택하기 위해서는 앞에서 배운 random.sample()를 이용할수 있다.

>>> random.sample(L,3)

[2, 8, 0]

 

또한 시퀸스객체를 임의로 섞기 위해서는 random.shuffle()을 이용할수 있다.

※ 이 함수는 인자로 전달된 시퀸스 객체를 직접 바꾼다.

>>> L = list(range(10))

>>> L

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

>>> random.shuffle(L)

>>> L

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

 

만약 원본 객체를 변경하지 않고원본 객체가 임의로 섞인 또 다른 객체를 얻기 위해서는 아래와 같이 할수 있다.

>>> L = list(range(10))

>>> S = random.sample(L,10) #임의로 섞인 객체 생성

>>> S

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

>>> L #원본 객체는 변경되지 않는다.

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

 

※ Random클래스의 경우 특별히 생성자를 호출하여 클래스 인스턴스를 생성하거나 클래스메서드를 호출하지는 않았다그 이유는 random.Random클래스의 인스턴스객체가 내부적으로 숨겨져 생성되었기 때문이다이러한 숨겨진 Random객체에 대해서는 seed값을 전달하지 않았기 때문에 시스템 시간 값을 사용한다만약 아래와 같이 명시적으로 두 Random객체를 생성하고 seed값을 동일하게 주면두 객체가 생성하는 임의 값은 동일하게 된다.

>>> import random

>>> R = random.Random(1) #seed값을 1로 주고 Random객체를 생성

>>> R.random()

0.13436424411240122

>>> R2 = random.Random() #seed값 없이 Random객체를 생성(시스템 시간 값이 사용됨)

>>> R2.random()

0.06825786856836125

>>> R2.seed(1) #이미 생성된 Random객체의 seed값을 변경

>>> R2.random() #R1 random()의 결과값과 동일

0.13436424411240122

 

 

참조 : 빠르게 활용하는 파이썬프로그래밍

 

'Python' 카테고리의 다른 글

Python,module threading [멀티스레드]  (0) 2016.05.19
Python, 데이터베이스의 사용  (0) 2016.05.19
Python,module decimal [십진법]  (0) 2016.05.19
Python,module fractions [분수]  (0) 2016.05.19
Python,module math [수학]  (0) 2016.05.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함