본문 바로가기
AI Codes/Numpy

Numpy Random Number Generating

by 아르카눔 2025. 4. 20.

넘파이로 랜덤 넘버를 만들 경우가 있는데 몇가지 자주 쓰던 방법을 정리한다.

 

추가적으로 [1, 2, 3, 4, 5]와 같은 연속된 수의 텐서를 만드는 방법과 순열을 적용하는 방법도 추가한다.

 

다음의 함수들을 다룬다.

 

  • random.rand
  • random.randint
  • random.choice
  • random.permutation
  • random.normal
  • random.binomial
  • arange
  • linspace
  • random.shuffle
  • logspace

 

 

1. np.random.rand()

 

[0, 1) 범위의 uniform dist에서 뽑는다.

 

import numpy as np

a = np.random.rand(2, 3)
print(a)


>> [[0.46763935 0.03182783 0.30743799]
 [0.28707536 0.42886214 0.12045299]]

 

 

2. np.random.randint()

 

random.randint(low, high=None, size=None, dtype=int)에서 low와 high는 파이토치와 동일하게 작동한다.

 

최소값과 최대값인데 값의 상한은 (high - 1)이다. low의 기본 값은 0이다. 

 

하나 특이한 점은 low와 high를 여러개로 요청할 수 있다는 점이다.

 

a = np.random.randint(2, size=3)
# high가 2라서 0과 1만 나온다. 
print(a)
>> [1 0 0]

b = np.random.randint(5, size=(2, 3))
print(b)
>> [[1 0 0]
 [3 2 2]]

c = np.random.randint([1, 3, 5], 10)
# 여러개의 low들, low의 개수만큼 생성 
print(c)
>> [6 6 5]

d = np.random.randint(1, [2, 5, 10], (2, 3))
# low의 개수 3 x high의 개수 2인 6개를 생성
print(d)
>> [[1 4 5]
 [1 3 5]]

 

 

3. np.random.choice

 

개인적으로 많이 썼던 함수다.

 

random.choice(a, size=None, replace=True, p=None)

 

1D 배열 혹은 리스트 a에서 size 만큼 뽑는다. 이때 replace=True면 복원 추출이고 False면 비복원 추출이다.

 

p는 배열 a에서 각 요소들을 뽑을 확률인데 p가 None이면 모두 동일한 확률이다. 

 

배열 a는 숫자일 필요는 없고 문자열이 담긴 리스트여도 된다. 

a = np.random.choice(5, 10)
print(a)
>> [2 3 3 3 3 0 2 3 4 0]

b = np.random.choice(5, 3, replace=False)
# replace=False면 size > a 는 불가능하다. 
print(b)
>> [2 4 0]

c = np.random.choice(4, 2, p=[0.1, 0.2, 0.3, 0.4])
print(c)
>> [0 3]

aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
d = np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
print(d)
>> ['pooh' 'pooh' 'rabbit' 'Christopher' 'pooh']

 

 

 

4. np.random.normal

 

정규분포에서 데이터를 샘플링한다. 

 

a = np.random.normal(0, 1, (2, 3))
print(a)
>> [[ 0.7475219   0.04074721 -0.14101866]
 [ 0.21887475 -1.36851585 -0.51404374]]

b = np.random.normal(5, 1, (2, 3))
print(b)
>> [[5.98810795 5.92737565 6.16421915]
 [4.92355834 4.87281897 4.82147056]]

 

 

5. np.random.binomial

 

Binomial dist에서 뽑는다. 

 

a = np.random.binomial(1, 0.5, (2, 3))
# n = 1이라서 Bernoulli와 같다. 
print(a)
>> [[1 0 0]
 [0 1 1]]

b = np.random.binomial(10, 0.5, (2, 3))
print(b)
>> [[6 4 8]
 [3 4 0]]

 

 

6. np.random.permutation

 

주어진 넘파이 배열이나 리스트에 대해서 순열의 결과를 반환한다.

 

a = np.random.permutation(5)
print(a)
>> [3 0 2 4 1]

b = np.random.permutation([1, 2, 3, 4, 5])
print(b)
>> [4 2 5 1 3]

c = np.random.permutation([[1, 2, 3], [4, 5, 6]])
print(c)
>> [[4 5 6]
[1 2 3]]

 

 

7. np.arange

 

numpy.arange([start, ]stop, [step, ]dtype=None, *, device=None, like=None)

 

like는 대상과 똑같은 형태로 반환한다.

 

stop은 마지막 숫자인데 이는 포함하지 않는다.

 

step은 기본적으로 1이다. 

 

a = np.arange(5)
print(a)
>> [0 1 2 3 4]

b = np.arange(5, 10)
print(b)
>> [5 6 7 8 9]

c = np.arange(1, 2.5, 0.5)
print(c)
>> [1.  1.5 2. ]

 

 

8. np.linspace

 

arange가 step이 정해져있다면 linspace에서는 총 개수인 num이 정해지면,

 

그에 따라서 자동적으로  step이 계산된다.

 

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0, *, device=None)

 

endpoint=True면 stop을 포함한다. 

 

a = np.linspace(0, 1, num=5)
print(a)
>> [0.   0.25 0.5  0.75 1.  ]

b = np.linspace(0, 10, num=5, dtype=np.int32)
print(b)
>> [ 0  2  5  7 10]

c = np.linspace(0, 10, num=5, dtype=np.float32)
print(c)
>> [ 0.   2.5  5.   7.5 10. ]

 

 

 

9. np.random.shuffle

 

in-place 연산으로 대상 배열의 순서를 모두 뒤섞는다. 

 

a = np.arange(10)
print(a)
>> [0 1 2 3 4 5 6 7 8 9]

np.random.shuffle(a)
print(a)
>> [9 8 2 7 6 4 0 3 5 1]

 

 

10. np.logspcae

 

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0)

 

linspace에 지수승을 한 결과와 같다. 

 

a = np.logspace(1.0, 3.0, num=4)
print(a)
>> [  10.           46.41588834  215.443469   1000.        ]

b = np.logspace(1.0, 3.0, num=4, base=np.e)
print(b)
>> [ 2.71828183  5.29449005 10.3122585  20.08553692]

y = np.linspace(1.0, 3.0, num=4, endpoint=True)

np.power(10.0, y)
>> array([  10.        ,   46.41588834,  215.443469  , 1000.        ])

 

 

 

 

 

 

References:

https://numpy.org/doc/stable/reference/random/generated/numpy.random.rand.html

https://numpy.org/doc/stable/reference/random/generated/numpy.random.choice.html

https://numpy.org/doc/stable/reference/random/generated/numpy.random.permutation.html

https://numpy.org/doc/stable/reference/generated/numpy.logspace.html

 

 

 

'AI Codes > Numpy' 카테고리의 다른 글

Numpy Products  (0) 2025.04.20
Numpy zeros, zeros_like, ones 등등  (0) 2025.04.20