목차
파이썬의 라이브러리인 numpy는 난수를 생성시키는 random 모듈이 있습니다. random 모듈에는 난수를 생성하는 다양한 함수가 있는데, 각 함수의 기능을 정확히 알아야 필요시 바로 사용할 수 있습니다. 이번에는 난수를 발생시키는 함수 중에 특정 범위 내에서 정수값의 난수를 생성하는 randint 함수에 대해 설명하려고 합니다. 난수에 관련된 내용은 아래 별도로 설명을 해 놓았으니 참고하시기 바랍니다.
https://lifelong-education-dr-kim.tistory.com/entry/파이썬에서-랜덤한-데이터를-생성하기-위한-방법feat-rand-함수
1. numpy.random.randint() 함수란?
numpy 홈페이지의 가이드에 따르면 randint() 함수의 기본 모양은 아래와 같습니다. randint() 함수는 최소한 1개의 인자를 입력해야 하는데 한 개만 입력할 경우 그 값은 high 값을 의미합니다.
randint() 함수 기본 사용 형태
import numpy as np
np.random.randint(low, high=None, size=None, dtype=int)
각 인자에 대한 설명입니다.
low: 난수의 최소값입니다. 이 값은 범위에 포함됩니다.
high: 난수의 최대값입니다. 이 값은 범위에 포함되지 않습니다. 기본값은 None이며, 이 경우에는 0부터 low까지의 범위에서 난수를 생성합니다.
size: 생성할 난수의 크기를 지정하는 정수 또는 튜플입니다. 예를 들어, size=5는 길이가 5인 1차원 배열을 생성하고, size=(3, 4)는 3x4 크기의 2차원 배열을 생성합니다. 기본값은 None이며, 이 경우에는 단일 난수가 반환됩니다.
dtype: 생성된 난수의 데이터 타입입니다. 기본값은 int로, 정수형 난수가 생성됩니다.
2. randint() 함수 인자값 넣는 방법
1절에서 randint() 함수의 기본 형태와 인자에 대한 설명을 했습니다. 인자의 경우 모두 넣을 필요 없이 하나 또는 여러 개를 넣어도 동작합니다. 인자값의 개수에 따라 어떻게 동작하는지 알아보겠습니다.
값을 하나만 넣었을 때 : randint(x)
이 경우에는 x는 high인자의 값으로 제공됩니다. low는 기본값인 0 값을 갖습니다. 만일, np.random.randint(4)를 사용한다면, 이는 [0, 4)의 범위에서 임의의 정수 한 개를 얻을 수 있습니다.
값을 두 개 넣었을 때 : randint(x, y)
이 때는 처음에 입력된 x가 low 인자에 입력되고 y가 high 인자에 입력됩니다. np.random.randint(2, 8)는 [2, 8)의 범위에서 임의의 정수 한 개를 만들어 냅니다.
값을 세 개 넣었을 때 : randint(x, y, z)
x는 low, y는 high, z는 size의 인자에 대응하게 됩니다. size를 별도로 입력하지 않으면 1개의 값만 만들어냅니다. 만일, np.random.randint(4, 9, 3)을 사용하면 [4, 9) 사이의 정수 3개를 ndarray로 생성합니다.
size를 별도로 지정한다면 : randint(5, size = 3)
randint 함수는 [0, 5) 범위에서 3개의 요소를 갖는 ndarrary를 생성합니다. 처음 입력된 5는 범위를 지정하는 high값으로 사용되고 low 값은 default인 '0'이 됩니다.
dtype의 인자가 있는 것은 매우 이상할 수 있습니다. 해당 함수는 정수 타입의 난수를 생성하는 함수인데, 굳이 별도의 데이터 타입을 결정하는 인자가 있다는 건 모순일 수 있습니다. 사실, dtype의 값을 다른 값으로 변경하면 에러가 발생됩니다. dtype 인자는 없는 것으로 생각하시는 게 좋습니다.
3. randint() 함수 예제 코드
인자값의 개수에 따라 그 결과가 달라진다고 설명드렸습니다. 각 경우에 따른 예제코드로 결과를 비교해 보겠습니다. 랜덤의 값을 여러 번 발생해서 어느 정도로 생성해 내는지 알아보기 위해 for문을 통해 난수를 여러번 생성하는 코드로 구성했습니다. 함수 특성 상 결과값은 실행 때마다 다릅니다.
값을 하나만 넣었을 때 : randint(4), 0~3사이의 정수
import numpy as np
for i in range(4):
x = np.random.randint(8)
print(x)
# 7
# 7
# 1
# 1
값을 두 개 넣었을 때 : randint(3, 8), 3~7사이의 정수 생성
for i in range(4):
x = np.random.randint(3, 8)
print(x)
# 6
# 3
# 4
# 7
값을 세 개 넣었을 때 : randint(3, 8, 4), 3~7사이의 정수 4개를 갖는 ndarray 생성
for i in range(4):
x = np.random.randint(3, 8, 4)
print(x)
# [3 5 5 3]
# [7 4 5 3]
# [6 7 7 7]
# [4 5 4 7]
size를 별도로 지정한다면 : randint(3, size = 4), 0~2사이의 정수 4개를 갖는 ndarray 생성
for i in range(4):
x = np.random.randint(3, size=4)
print(x)
# [0 0 2 1]
# [1 2 1 0]
# [1 0 1 0]
# [0 2 1 2]
4. 마치며
파이썬의 numpy 라이브러리 중 정수 형태의 난수를 생성하는 randint() 함수에 대해 알아보았습니다. randint()는 최소한 하나의 인자를 넣어줘야 동작을 합니다. 한 개부터 3개까지 입력을 할 수 있지만 입력되는 개수에 따라 각 입력값이 어떤 인자에 대응되는지도 같이 확인해야 합니다.