본문 바로가기
파이썬

randint를 사용할 땐 주의하라고?

by hustler78 2022. 6. 27.
728x90
반응형

파이썬의 randint 함수는 이름에서도 느껴지듯이 정수형 난수를 추출하는 함수입니다.

 

그런데 이 함수를 쓸 땐 조심해야 할 점이 있습니다.

 

randint 함수는 다음의 두 경우가 있습니다.

 

1. numpy  모듈안의 random.randint
numpy.random.randint

용법은 아래와 같이 씁니다.

 

random.randint(low, high=None, size=None, dtype=int)

numpy tutorial 을 보면 다음과 같은 말이 써 있습니다.

Return random integers from low (inclusive) to high (exclusive).

 

즉 low 값은 포함하고, high 값은 포함하지 않습니다.

 

반면에 다음의 randint도 있습니다.

 

2. random.randint
random.randint(a,b)

random tutorial을 보면 아래와 같이 소개되어 있습니다.

Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).

즉, a와 b값을 포함한 사이에서의 정수 난수를 반환해 줍니다.

 

 

따라서 무턱대로 randint를 썼다가는 어떤 모듈 하에서 정의되었느냐에 따라 상계(upper bound)가 포함될 수도, 안될 수도 있는 상황이 되는 거죠.

 

아래 예를 보실까요?

import numpy as np
import matplotlib.pyplot as plt
import random

def random_test():
    a = []
    b = []
    for _ in range(100):
        a.append(np.random.randint(0, 5))
        b.append(random.randint(0, 5))

    print(set(a))
    print(set(b))

if __name__ == '__main__':
    random_test()

 

 

    for _ in range(100):
        a.append(np.random.randint(0, 5))
        b.append(random.randint(0, 5))

○ numpy.random.randint(0,5)에서 뽑은 정수 난수를 100 개 추출합니다.

○ random.randint(0,5) 에서 뽑은 난수를 100개 추출합니다.

 

 

 

    print(set(a))
    print(set(b))

  a와 b 리스트의 set를 걸어 출력합니다. set은 말 그래도 집합을 뜻하는 것으로서 순서 고려하지 않고, 겹치는 수는 제외하고  서로 다른 수들만 원소나열법 보여줍니다.

 

결과는 다음과 같습니다.

{0, 1, 2, 3, 4}
{0, 1, 2, 3, 4, 5}

Process finished with exit code 0

어떻습니까? numpy의 randint에는 5가 포함되지 않고 random의 randint에는 5가 포함되어 있죠? 따라서 어떤 함수를 쓰냐에 따라 결과가 엄청 달라질 수 있으니 주의 바랍니다.

728x90
반응형

댓글