넘파이로 랜덤 넘버를 만들 경우가 있는데 몇가지 자주 쓰던 방법을 정리한다.
추가적으로 [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 |