[Numpy] ndarray를 Random하게

5가지 형태로 랜덤하게 ndarray를 생성할 수 있어요!

  • np.random.normal() : 정규분포 확률밀도함수에서 실수 표본을 추출해서 ndarray를 생성하며 정규분포 그래프를 평균,표준편차 필요
mean = 50
std = 2
arr = np.random.normal(mean,std,(100000,))
print(arr)
plt.hist(arr,bins=1000)
plt.show()  # 출력 결과 01

출력 결과 01

[48.08026042 50.64705142 50.89328134 … 50.29764312 49.10224386 49.97381904] img

  • np.random.rand(d1,d2,d3,...) : 0 이상 1미만의 균등분포 확률밀도함수에서 실수 표본을 추출해서 ndarray를 생성
arr = np.random.rand(100000)
print(arr)
plt.hist(arr,bins=100)
plt.show()  # 출력 결과 02

출력 결과 02

[0.28523578 0.55571099 0.83913149 … 0.8335679 0.61201189 0.92283897] img

  • np.random.randn() : 표준 정규분포상에서 실수 표본을 추출해서 ndarray를 생성, 평균이 0이고 표준편차가 1인 정규분포를 표준정규분포
arr = np.random.randn(100000)
print(arr)
plt.hist(arr,bins=100)
plt.show()  # 출력 결과 03

출력 결과 03

[-1.65893962 0.83696072 -0.74883022 … 2.84925579 0.02987112 0.89703998] img

  • np.random.randint(low, high, shape) : 최소값과 최대값 사이에서 정해진 shape으로 난수를 추출해서 ndarray를 생성, 균등분포를 이용해서 난수 추출
arr = np.random.randint(-100, 100, (100000,))
print(arr)
plt.hist(arr,bins=100)
plt.show()  # 출력 결과 04

출력 결과 04

[-22 40 51 … -17 -32 66] img

  • np.random.random(shape) : 0이상 1미만의 균등분포에서 실수 난수를 추출해서 ndarray를 생성
arr = np.random.random((100000,))
print(arr)
plt.hist(arr,bins=100)
plt.show()  # 출력 결과 05

출력 결과 05

[0.55844588 0.75907513 0.62556412 … 0.56736381 0.46927807 0.85982802] img

정리. random값을 이용해서 ndarray를 생성하는 방법!!#

  1. python의 list를 이용해서 ndarray생성 => np.array()
  2. np.ones(), np.zeros(), np.full(), np.empty(), np.ones_like()
  3. np.arange()
  4. np.linspace()
  5. np.random.~~() 랜덤값으로 ndarray를 생성하는 5가지 함수

Numpy 난수 관련 함수#

난수의 재현성을 확보해보아요!

  • 랜덤값(난수) : 컴퓨터의 난수는 알고리즘에 근거해요. 초기값(seed)을 이용해서 특정 알고리즘을 수행시켜서 난수값을 도출
import numpy as np

np.random.seed(3) # seed 설정

arr = np.random.randint(0,100,(5,))
print(arr)

데이터의 순서를 바꾸려면?? shuffle()#

shuffle()을 사용하면 ndarray의 원본이 바뀌게 된다.

arr = np.arange(0,10,2)
print(arr)

np.random.shuffle(arr)
print(arr)

Data set에서 일부를 무작위로 sampling을 수행 choice()#

# numpy.random.choice(a, size, replace, p)
# a : ndarray, 혹은 정수가 나오면 arange()를 수행한 결과
# size : sample 개수
# replace=True : 한번 뽑은걸 다시 뽑을 수 있어요!
# ndarray => p=[0.1, 0.3, 0, 0.1, 0.1, 0.35, 0.05]

arr = np.array([1,2,3,4,5,6,7])
print(arr)
arr = np.arange(5)
result = np.random.choice(arr,3, replace=False, p=[0.1, 0.3, 0, 0.1, 0.1, 0.35, 0.05])
print(result)